【问题标题】:Python selenium scraper works perfect on windows but not on raspian raspbianPython selenium scraper 在 Windows 上完美运行,但在 raspian raspbian 上却不行
【发布时间】:2019-03-19 13:11:58
【问题描述】:

此脚本的目的是从我的工作日程中获取信息。当我在 Windows 笔记本电脑上运行完整的脚本时,它运行良好,但是当我尝试在 raspian 上运行时,它会出现 click.() on the "display_but" 变量没有做它的工作。页面拉得很好并且没有问题记录,它甚至可以毫无问题地从下拉列表中选择一个选项。只有在单击显示按钮时才会出现错误。正在找到该对象,就好像我打印它一样,我得到了一个 selenium web 对象。没有错误消息。当我使用 drop.click() 时,这似乎可以作为下拉菜单中的正确选项被选中。我迷路了

以下是我尝试过的解决方法。 1. 使用 Keys 模块 tab 到按钮然后提交。 - 这导致选择了正确的按钮,但是当我使用键“按 Enter”时没有任何反应。 2. 我尝试使用 WebDriverWait、预期条件和按模块等待元素可点击 - 这种方法也适用于我的窗户,但不适用于 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()

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      我不确定这是由于树莓派 3+ 缺乏计算能力还是其他一些因素,但现在一切正常。也许其他人可以解释为什么 headless 可以工作,但普通的 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)
      

      【讨论】:

        猜你喜欢
        • 2022-06-13
        • 1970-01-01
        • 2016-11-18
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多