Zar*_*chi 5 python selenium headless-browser geckodriver firefox-headless
当我抓取包含使用无头选项的产品的页面时,我得到不同的结果。
对于同一问题,一次我得到的结果未排序,另一次得到正确排序的结果。
硒火狐浏览器:
firefox_options = Options()
firefox_options.headless = True
browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)
Run Code Online (Sandbox Code Playgroud)
根据这篇文章:
“当使用无头选项时,Firefox 不会发送不同的标头”。
如何使用无头选项从抓取中获得恒定的结果?
更新:
事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,问题得到了解决。
感谢您的任何建议
理想情况下,使用和不使用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()
Run Code Online (Sandbox Code Playgroud)控制台输出:
Headless Firefox Initialized
Window size: width = 1366px, height = 768px
Firefox Initialized
Window size: width = 1382px, height = 744px
Run Code Online (Sandbox Code Playgroud)从上面的观察可以推断,使用--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)
Run Code Online (Sandbox Code Playgroud)
您可以在以下位置找到一些有关窗口大小的相关讨论:
| 归档时间: |
|
| 查看次数: |
6755 次 |
| 最近记录: |