excel - 如何使用 Selenium 在 Headless 模式下使用 Google Chrome 查找 XPath?
问题描述
我正在尝试从谷歌获取一些商店/公司的手机号码等信息,并将其存储在 Excel 表上。
我使用 Chrome 驱动程序 ( v_74.0.3729.6 )。
它在正常模式下与 Chrome 一起工作,它使用 XPath 找到元素,但当我在无头模式下使用 Chrome 时却不行。
我试图改变窗口的大小并添加一些选项:
.AddArgument ("--window-size=1920,1080")
.AddArgument ("--no-sandbox")
.AddArgument ("--start-maximized")
.AddArgument ("--disable-gpu")
.AddArgument ("--disable-extensions")
我还尝试了不同的 XPath(但如果它在没有无头模式的情况下工作,我想 XPath 是正确的):
browser.FindElementsByXPath("(//span[@class='LrzXr zdqRlf kno-fv'])[1]")
browser.FindElementsByXPath("//*[@id='uid_6']/div[1]/div[2]/div[4]/div/div/span[2]")
我还尝试设置等待时间(以确保页面已完全加载):
Application.Wait (Now + TimeValue("0:00:2"))
Dim browser As New ChromeDriver
With browser
.AddArgument ("--window-size=2160,3840")
.AddArgument ("--headless")
End With
denomination = "Fnac Lyon Bellecour"
adresse = "85 Rue de la République 69002 Lyon"
browser.Get ("https://www.google.com")
browser.FindElementByName("q").SendKeys (denomination & " " & adresse)
SendKeys "~"
Application.Wait (Now + TimeValue("0:00:2"))
If browser.FindElementsByXPath("(//span[@class='LrzXr zdqRlf kno-fv'])[1]").Count >= 1 Then
telephone = browser.FindElementByXPath("(//span[@class='LrzXr zdqRlf kno-fv'])[1]").Text
Sheets("Donnees").Cells(1, 13).Value = telephone
End If
它通常会在单元格 M1 中复制商店的手机号码,但找不到该元素。
解决方案
我已经python selenium
使用 chrome headless 模式进行了验证,每次运行此代码时它都可以正常工作。我使用WebdriverWait
的是显式等待并等待元素可点击,然后获取文本值。
我相信你可以在VBA
.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('window-size=1920x1080');
driver=webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com")
denomination = "Fnac Lyon Bellecour"
adresse = "85 Rue de la République 69002 Lyon"
element=driver.find_element_by_name('q')
element.send_keys(denomination + ' ' + adresse)
element.submit()
print(WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[@class='LrzXr zdqRlf kno-fv']"))).text)
输出:
+33 825 02 00 20
推荐阅读
- javascript - 配置加载更多按钮
- android - 延迟 2 秒后调用方法
- twitter-bootstrap - Firefox 表问题,使用 react 和 bootstrap
- svelte - 延迟加载图像(svelte/sapper)
- c# - 将 Json actionresult 和 HttpStatusCodeResult 作为可能的结果,但只有一个返回
- swift - 使用日期信息对自定义结构进行排序
- android - 数据绑定重定向到 xml 在 android studio 3.1.2 中不起作用
- python - OpenCV video not getting saved
- scala - 如何在另一个内部命令(不是外部命令)的 sbt 中获取返回码?
- variables - “...不是内部或外部命令、可运行程序或批处理文件。”