【问题标题】:Selenium messes up whenever 'chromedriver' it isn't the active window每当“chromedriver”不是活动窗口时,Selenium 就会搞砸
【发布时间】:2020-10-12 21:25:04
【问题描述】:

(我正在使用 Macbook Pro 2020)

每当 chrome-driver-window 不是“活动”窗口时,我的 selenium 自动化代码似乎就会出错。具体来说:

selenium 需要向网站发出请求并从中获取一些数据,但每当我将 chrome-driver-window 最小化时,它就不会获取新数据,而是复制它之前给我的数据。

我相当肯定这不是因为我的代码而是因为 selenium,所以我想问:当 chrome-driver-window 最小化时,如何让 selenium 正常工作。

代码如下:

for i in df2["keywords"]:
    time.sleep(1)
    search.send_keys(i)
    search.send_keys(Keys.RETURN)
    try:
        element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "p.total-results.js_total_results"))
    )
    except:
        print("FIRST ELEMENT NOT FOUND")
        driver.quit()
    search = driver.find_element_by_css_selector("input#searchfor.wsp-search__input")
    data['aanbod'] = driver.find_element_by_css_selector('p.total-results.js_total_results').text
    df3 = df3.append(data, ignore_index=True)
    search.clear()
    print(data)

如您所见,我将 selenium 与 pandas 结合使用进行数据分析。这是当我继续关注 chrome-driver-window 时数据的样子:

{'aanbod': '92 resultaten'}
{'aanbod': '167 resultaten'}
{'aanbod': '1.144 resultaten'}
{'aanbod': '102 resultaten'}
{'aanbod': '829 resultaten'}
{'aanbod': '91 resultaten'}
{'aanbod': '125 resultaten'}
{'aanbod': '225 resultaten'}
{'aanbod': '800 resultaten'}
{'aanbod': '276 resultaten'}

这就是我没有专注于窗口时的样子:

{'aanbod': '92 resultaten'}
{'aanbod': '92 resultaten'}
{'aanbod': '92 resultaten'}
{'aanbod': '92 resultaten'}
{'aanbod': '92 resultaten'}
{'aanbod': '92 resultaten'}
{'aanbod': '92 resultaten'}
{'aanbod': '92 resultaten'}

chrome 版本:mac 85.0.4183.121(官方构建)(64 位), chrome驱动版本:mac 64 ChromeDriver 85.0.4183.87

【问题讨论】:

  • 你能详细解释一下吗?您可以使用这些指南作为参考。 How do I ask a good questionminimal reproducible example。我认为这将提高答案的质量。
  • 你用的是哪个版本的chrome驱动??
  • 我已经编辑了问题,谢谢你的提示。我还添加了我正在使用的 chrome 驱动程序版本。
  • 为什么chrome窗口最小化了?您是否希望脚本在您执行其他操作时在后台运行或......?
  • @0buz 是的,完全正确。我希望它在后台运行,这样我仍然可以在 mac 上工作。 (我不可能用其他语言重写所有代码,所以它会在后台运行)

标签: python selenium


【解决方案1】:

如果您希望脚本在后台运行,请尝试使用 chrome 的 headless 选项。在无头模式下工作时,最好也添加--start-maximized,因为在某些情况下,如果没有此选项会导致无法识别元素。

在脚本的开头添加这些行:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--start-maximized")

您将不再看到浏览器和所有点击、导航等发生的事情,只看到控制台中的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2015-12-27
    • 2021-07-10
    • 2015-09-24
    • 2018-08-10
    相关资源
    最近更新 更多