当 'chromedriver' 不是活动窗口时,Selenium 会出现问题。

4

我正在使用 Macbook Pro 2020 进行工作。

当 Chrome 窗口不是 'active' 窗口时,我的 Selenium 自动化代码似乎会出现问题。更具体地说:

Selenium 需要向网站发出请求并从中获取一些数据,但每当我将 Chrome 驱动程序窗口最小化时,它就无法获得新数据,而是复制了之前给我的数据。

我相信这不是由于我的代码,而是由于 Selenium,因此我想问:如何让 Selenium 在 Chrome 驱动程序窗口最小化时正常工作。

以下是代码:

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驱动程序窗口的关注时,数据呈现如下:

{'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 版本: macOS 85.0.4183.121(官方版本)(64 位), Chrome 驱动程序版本: macOS 64 ChromeDriver 85.0.4183.87


请问您能否详细解释一下?您可以参考以下指南:如何提出好问题最小可重现示例。我认为这将提高答案的质量。 - akane
你正在使用哪个版本的 Chrome 驱动程序? - theNishant
我已经编辑了问题,感谢您的提示。我还添加了我正在使用的Chrome驱动程序版本。 - Aslan Madaev
为什么Chrome窗口被最小化了?您想让脚本在您做其他事情时在后台运行吗? - 0buz
@0buz 是的,完全正确。我希望它能在后台运行,这样我就可以继续在 Mac 上工作。(但是我不会重写所有代码以便在其他语言中运行) - Aslan Madaev
1个回答

2
如果您希望脚本在后台运行,请尝试使用 Chrome 的 headless 选项。在 headless 模式下工作时,最好添加 --start-maximized,因为有些情况下没有此选项可能导致元素无法识别。
请将以下行添加到脚本开头:
from selenium.webdriver.chrome.options import Options

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

你将不再看到浏览器和所有的点击、导航等操作,只能在控制台中看到结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接