当我抓取包含使用无头选项产品的页面时,我得到不同的结果。 对于同一个问题,一次我得到未排序的结果,而另一次我得到正确的排序顺序。
Selenium firefox浏览器:
firefox_options = Options() firefox_options.headless = True browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)
更新:
事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,解决了问题。
感谢您的任何建议
理想情况下,使用和不使用firefox_options.headless = True不会对要渲染的DOM树中的元素产生任何重大影响,但就视口而言,可能会有重大不同。
firefox_options.headless = True
作为一个例子,当GeckoDriver / Firefox是与沿着初始化 --headless 选项的默认 视口 是 width = 1366px, height = 768px 其中当GeckoDriver / Firefox是没有初始化--headless选项的默认 视口 是 width = 1382px, height = 744px 。
--headless
width = 1366px, height = 768px
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()以下方式进行配置:
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)