Python селен скребок отлично работает на окнах, но не на распианец распбиан - PullRequest
0 голосов
/ 19 марта 2019

Цель этого скрипта - вычеркнуть информацию из моего рабочего графика.Полный скрипт отлично работает, когда я запускаю его на своем ноутбуке с Windows, но когда я пытаюсь запустить его на raspian, появляется щелчок. () В переменной «display_but» не справляется со своей работой. Страница работает нормально и регистрируется без проблем, и он даже выбирает вариант из выпадающего без проблем.Только при нажатии на кнопку дисплея появляется ошибка.Объект находят, как будто я его печатаю и получаю веб-объект селена.Там нет сообщений об ошибках.Когда я использую drop.click (), это работает, так как выбирается правильный вариант из выпадающегоЯ потерян

Ниже представлены обходные пути, которые я пробовал.1. С помощью модуля «Ключи» перейти к кнопке и затем отправить.- это приводит к тому, что выбирается правильная кнопка, но когда я нажимаю клавишу ввода, ничего не происходит2. Я пытался дождаться нажатия на элемент, используя WebDriverWait, ожидаемые условия и модули By - этот метод также работает на моих окнах, но не на raspian 3. Я пытался добавить неявные ожидания и time.sleep - эти методы, похоже, неhelp

Ниже мой код

import time

from selenium import webdriver

driver = webdriver.Chrome(executable_path="/Users/Sanch/Desktop/Drivers/chromedriver")

url = 'website'
driver.get(url)

#logs into account
username_xpath = '//*[@id="usernameInputField"]'
password_xpath = '//*[@id="passwordInputField"]'
login_xpath = '//*[@id="submitButton"]/span/input'
user_name = driver.find_element_by_xpath(username_xpath)
user_name.send_keys('username')
password = driver.find_element_by_xpath(password_xpath)
password.send_keys('password')
password.submit()

#selects option from dropdown
drop_xpath ='/html/body/associate/div/view-userschedule/div/div/div[2]/div/div[1]/select/option[2]'
drop = driver.find_element_by_xpath(drop_xpath)
drop.click()
time.sleep(3)

#clicks display button 
Clicks display button (shows whatever selected in dropdown)
display_but_xpath = '/html/body/associate/div/view-userschedule/div/div/div[2]/div/div[3]/button'
display_but = driver.find_element_by_xpath(display_but_xpath)
display_but.click()

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Решил проблему, запустив скрипт с хромом без головы вместо обычного хрома. Использование приведенного ниже кода вместо "driver = webdriver.Chrome (executetable_path =" / Users / Sanch / Desktop / Drivers / chromedriver ")" сделало так, чтобы скрипт работал правильно.

Я не уверен, было ли это из-за недостатка вычислительной мощности с raspberry pi 3+ или каким-то другим фактором, но сейчас все работает правильно. Может быть, кто-то еще может пролить свет на то, почему безголовый будет работать, но обычный хром не будет. Спасибо всем за помощь!

#headless driver setup and launch
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
chrome_driver = "your drivers path"
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_driver)
0 голосов
/ 19 марта 2019

Вы, вероятно, должны делать как можно больше из контекста браузера.Например:

driver.execute_script("document.querySelector('[id=usernameInputField]').value = 'user'")
driver.execute_script("document.querySelector('[id=passwordInputField]').value = 'password'")
driver.execute_script("document.querySelector('css-for-button').click()")
...