#python #selenium #xpath #metamask
Вопрос:
Я пытаюсь настроить метамаску импорта selenium, однако, когда я использую xpath /html/body/div[1]/div/div[3]/div/div/div/button
, моя консоль возвращает «selenium.common.исключения.Исключение NoSuchElementException: Сообщение: такого элемента нет: Не удается найти элемент: {«метод»:»xpath»,»селектор»:»/html/тело/div[1]/div/div[3]/div/div/div/кнопка»} (Информация о сеансе: chrome=93.0.4577.82)»
Что странно, так как, когда я использую $x("/html/body/div[1]/div/div[3]/div/div/div/button")
инструменты разработки Chrome, он может идентифицировать кнопку «Начать». Как я могу исправить эту ошибку и почему я получаю указанную ошибку?
Полный Исходный Код:
from selenium.webdriver.chrome.options import Options
import time
options = Options()
options.add_extension('metamask-chrome-9.8.4.crx')
driver = webdriver.Chrome('./chromedriver', options = options)
driver.get('https://google.com')
time.sleep(2)
get_started_button = driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/div/div/div/button")
get_started_button.click()
input('Press [ENTER] to close browsers...')
driver.quit()```
Полный Журнал Ошибок:
File "D:Riasmetamask seleniumscript.py", line 13, in <module>
get_started_button = driver.find_element_by_xpath("/html/body/div[1]/div/div[3]/div/div/div/button")
File "C:UsersUserAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:UsersUserAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:UsersUserAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:UsersUserAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremoteerrorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[1]/div/div[3]/div/div/div/button"}
(Session info: chrome=93.0.4577.82)```
Комментарии:
1. Пожалуйста, опубликуйте html.
2. Проверьте, является ли элемент
iframe
илиshadow-root
.3. @normon99 : Можно ли поделиться URL — адресом страницы ?
4. Я могу, но вам нужно установить расширение metamask, чтобы получить доступ к URL-адресу. Не могли бы вы связать ссылку с расширением? Я считаю, что он перенаправляет вас на этот URL-адрес, когда вы устанавливаете его в первый раз
5. pastebin.com/PnUJtAuY Кнопка // html, на которую я пытаюсь нажать, это
</style></div><div class="main-container-wrapper"><div class="first-time-flow">
Ответ №1:
Есть 4 способа щелкнуть в Selenium.
Я буду использовать этот xpath
//button[text()='Get Started']
Пробная версия кода 1 :
time.sleep(5)
driver.find_element_by_xpath("//button[text()='Get Started']").click()
Пробная версия кода 2 :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Get Started']"))).click()
Пробная версия кода 3 :
time.sleep(5)
button = driver.find_element_by_xpath("//button[text()='Get Started']")
driver.execute_script("arguments[0].click();", button)
Испытание кода 4 :
time.sleep(5)
button = driver.find_element_by_xpath("//button[text()='Get Started']")
ActionChains(driver).move_to_element(button).click().perform()
Импорт :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
PS : Пожалуйста, проверьте инструменты разработки, есть ли у нас уникальный вход HTML DOM
или нет.
Шаги для проверки:
Press F12 in Chrome
-> перейдите в раздел элементов ->> нажмите CTRL F ->>> затем вставьте xpath и посмотрите, подсвечивается ли нужный элемент.
Ответ №2:
Когда вы загружаете расширение metamask в свой драйвер selenium (chrome), на страницу metamask происходит перенаправление, которое вы можете увидеть в открывшемся окне chrome. но селен не смог найти кнопку, потому что он все еще видит первую вкладку как свою активную вкладку, поэтому он ищет кнопку не в том месте и не на той вкладке.
вы должны изменить активную вкладку в selenium на вкладку «метамаска». смотрите приведенный ниже фрагмент
from selenium.webdriver.chrome.options import Options
import time
options = Options()
options.add_extension('metamask-chrome-9.8.4.crx')
driver = webdriver.Chrome('./chromedriver', options = options)
driver.get('https://google.com')
time.sleep(2)
driver.switch_to.window(driver.window_handles[0])
get_started_button = driver.find_element_by_class_name("first-time-flow__button")
get_started_button.click()
input('Press [ENTER] to close browsers...')
driver.quit()
Я только что добавил эту строку:
driver.switch_to.window(driver.window_handles[0])
чтобы переключиться на страницу расширения и изменить выбор кнопки по XPath на имя класса
со мной это прекрасно работает.