gpt4 book ai didi

python - Selenium Firefox headless 返回不同的结果

转载 作者:行者123 更新时间:2023-12-02 09:54:00 29 4
gpt4 key购买 nike

当我抓取包含使用 headless 选项的产品的页面时,我得到不同的结果。
对于同一问题,一次我得到的结果未排序,另一次得到正确排序的结果。

Selenium 火狐浏览器:

firefox_options = Options()
firefox_options.headless = True
browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)

根据this帖子:
“使用 headless 选项时,Firefox 不会发送不同的 header ”。

如何使用 headless 选项从抓取中获得恒定的结果?

更新:

原来广告弹出窗口隐藏了价格排序菜单。设置恒定的窗口大小,如 DebanjanB 发布的,问题解决了。

感谢您的建议

最佳答案

理想情况下,使用和不使用 firefox_options.headless = True 都不会对 DOM Tree 中的元素产生任何重大影响。得到渲染,但可能与Viewport有显着差异很关心。

例如,当 GeckoDriver/Firefox 与 --headless 选项一起初始化时,默认视口(viewport)width = 1366px,height = 768px 当 GeckoDriver/Firefox 在没有 --headless 选项的情况下初始化时,默认视口(viewport)宽度=1382px,高度=744px

  • 示例代码:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC

    options = webdriver.FirefoxOptions()
    options.headless = True
    driver = webdriver.Firefox(options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get("https://www.google.com/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "q")))
    print ("Headless Firefox Initialized")
    size = driver.get_window_size()
    print("Window size: width = {}px, height = {}px".format(size["width"], size["height"]))
    driver.quit()
    driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get("https://www.google.com/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "q")))
    print ("Firefox Initialized")
    size = driver.get_window_size()
    print("Window size: width = {}px, height = {}px".format(size["width"], size["height"]))
    driver.quit()
  • 控制台输出:

    Headless Firefox Initialized
    Window size: width = 1366px, height = 768px
    Firefox Initialized
    Window size: width = 1382px, height = 744px
<小时/>

结论

从上述观察可以推断,使用 --headless 选项 GeckoDriver/Firefox 打开的浏览上下文会减少视口(viewport),因此识别的元素数量可以更少

<小时/>

解决方案

使用 GeckoDriver/Firefox 启动浏览上下文时,始终以最大化模式打开或通过set_window_size()进行配置如下:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.FirefoxOptions()
options.headless = True
#options.add_argument("start-maximized")
options.add_argument("window-size=1400,600")
driver = webdriver.Firefox(options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
driver.get("https://www.google.com/")
driver.set_window_size(1920, 1080)
<小时/>

tl;博士

您可以在以下位置找到一些关于窗口大小的相关讨论:

关于python - Selenium Firefox headless 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59031706/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com