为了账号安全,请及时绑定邮箱和手机立即绑定

Python selenium 刮板在 Windows 上运行良好

Python selenium 刮板在 Windows 上运行良好

慕村225694 2021-12-09 10:33:25
这个脚本的目的是从我的工作日程中抓取信息。当我在我的 Windows 笔记本电脑上运行它时,完整的脚本工作正常,但是当我尝试在 raspian 上运行时,“display_but”变量上的 click.() 没有完成它的工作。页面拉起来很好,没有问题,它甚至可以毫无问题地从下拉列表中选择一个选项。只有在单击显示按钮时才会出现错误。找到该对象就好像我打印它一样,我得到了一个 selenium web 对象。没有错误消息。当我使用 drop.click() 时,这似乎是从下拉列表中选择了正确的选项。我搞不清楚了以下是我尝试过的解决方法。1. 使用 Keys 模块 tab 到按钮然后提交。- 这会导致选择了正确的按钮,但是当我使用按键“按 Enter”时什么也没有发生。2. 我尝试使用 WebDriverWait、预期条件和按模块等待元素可点击 - 此方法也适用于我的 Windows,但不适用于 raspian 3. 我尝试添加隐式等待和 time.sleep - 这些方法似乎没有帮助下面是我的代码import timefrom selenium import webdriverdriver = webdriver.Chrome(executable_path="/Users/Sanch/Desktop/Drivers/chromedriver")url = 'website'driver.get(url)#logs into accountusername_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 dropdowndrop_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 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

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


我不确定这是由于 raspberry pi 3+ 缺乏计算能力还是其他原因,但现在一切正常。也许其他人可以阐明为什么无头会起作用,但普通的 chrome 不会。感谢大家的帮助!


#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)


查看完整回答
反对 回复 2021-12-09
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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


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



查看完整回答
反对 回复 2021-12-09
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信