Selenium Firefox无头返回不同结果

发布于 2021-01-29 15:05:15

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

Selenium firefox浏览器:

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

根据这篇文章:
“ firefox使用无头选项时不会发送不同的头”。

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

更新:

事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,解决了问题。

感谢您的任何建议

关注者
0
被浏览
85
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    理想情况下,使用和不使用firefox_options.headless = True不会对要渲染的DOM树中的元素产生任何重大影响,但就视口而言,可能会有重大不同。

    作为一个例子,当GeckoDriver / Firefox是与沿着初始化 --headless 选项的默认 视口width = 1366px, height = 768px 其中当GeckoDriver / Firefox是没有初始化--headless选项的默认 视口
    width = 1382px, height = 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打开了具有减小的 视口浏览上下文
    ,因此标识的元素数量可以 更少* 。 __ *


    在使用GeckoDriver / Firefox启动 浏览上下文时,请 始终以 maximized
    模式打开或通过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; 博士

    您可以在以下 _ 窗口中 找到几个有关 _ 窗口大小 的相关讨论:



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看