Selenium [VBA]: не удается найти XPath с Google Chrome в режиме без головы - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь получить информацию от Google, такую ​​как номер мобильного телефона для некоторых магазинов / компаний, и сохранить ее на листе 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, но не может найти элемент.

1 Ответ

0 голосов
/ 05 июня 2019

Я подтвердил с помощью python selenium в режиме безголового Chrome, и он работает нормально каждый раз, когда я запускаю этот код. Я использовал 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

...