Python Selenium Scraper在Windows上可以完美运行,但在Raspian Raspbian上却不能

时间:2019-03-18 23:30:34

标签: python selenium web-scraping raspberry-pi3 raspbian

此脚本的目的是从我的工作计划中抓取信息。当我在Windows笔记本电脑上运行该脚本时,完整脚本可以正常运行,但是当我尝试在raspian上运行该脚本时,它会显示“ display_but”变量上的click。()不能正常工作。该页面可以正常运行并且可以正常登录,甚至可以从下拉列表中选择一个选项。仅当单击显示按钮时,才会出现错误。发现该对象就像我将其打印出来一样,得到了一个硒Web对象。没有错误消息。当我使用drop.click()时,这似乎可以从下拉菜单中选择正确的选项。我迷路了

以下是我尝试过的解决方法。 1.使用“密钥”模块将按钮制表到该按钮,然后提交。 -这导致选择了正确的按钮,但是当我使用键“按Enter”时,什么也没有发生。 2.我尝试使用WebDriverWait,预期条件和按模块来等待元素可单击 -此方法也可以在我的Windows上使用,但不能在raspian上使用 3.我尝试添加隐式等待和time.sleep -这些方法似乎没有帮助

下面是我的代码

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 :(得分:0)

您可能应该从浏览器上下文中尽可能多地执行此操作。例如:

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()")

答案 1 :(得分:0)

通过使用无头chrome(而不是常规chrome)运行脚本解决了该问题。使用下面的代码代替“ driver = webdriver.Chrome(executable_path =“ / Users / Sanch / Desktop / Drivers / chromedriver”)“可以使脚本正确运行。

我不确定这是否是由于树莓派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)