excel - 如何使用 Selenium 在 Headless 模式下使用 Google Chrome 查找 XPath?

标签 excel vba selenium xpath google-chrome-headless

我正在尝试从谷歌获取一些商店/公司的手机号码等信息,并将其存储在 Excel 表上。
我使用 Chrome 驱动程序(v_74.0.3729.6)。
它适用于 中的 Chrome普通模式 ,它使用 XPath 找到元素,但当我在 中使用 Chrome 时找不到 headless 模式 .
我试图改变窗口的大小并添加一些选项:

.AddArgument ("--window-size=1920,1080")
.AddArgument ("--no-sandbox")
.AddArgument ("--start-maximized")
.AddArgument ("--disable-gpu")
.AddArgument ("--disable-extensions")
我还尝试了不同的 XPath(但如果它在没有 headless 模式的情况下工作,我想 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

关于excel - 如何使用 Selenium 在 Headless 模式下使用 Google Chrome 查找 XPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56460451/

相关文章:

python - 如何在不保存的情况下使用 win32com 退出 Excel?

excel - 在 Excel 工作表中预定义列数据类型

VBA - 查找重复并比较其中哪一个是最高的

java - 将鼠标悬停在动画菜单上并单击 selenium 中的菜单项

Java Apache POI 打开文件?

vba - Excel vba Union方法复制重叠的单元格

excel - 如何将 MS-Access 查询转换为 MS-Excel 中的工作表

vba - 将工作表名称粘贴到多个工作表中

java - Selenium 定义要在多测试中共享的常量变量

python Selenium : Looking for ways to print page load time