#python #selenium
#python #селен
Вопрос:
Попытка заставить Selenium нажать кнопку «Принять» на кнопке «Политика использования файлов cookie» перед доступом к форме регистрации. (Я хочу автоматизировать функциональность списка ожидания, поскольку в этом тренажерном зале всегда гонка), но я застрял на первом препятствии и потратил часы, пытаясь расшифровать сообщение об ошибке. Не могли бы вы помочь?
Код
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
PATH = "C:Program Files (x86)chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://member.superfit.club/")
driver.find_element_by_link_text("Akzeptieren").click()
Сообщение об ошибке:
Traceback (most recent call last):
File "C:UsersCsongorDropboxCodingnew test 6th oct 2020test.py", line 8, in <module>
driver.get("https://member.superfit.club/").find_element_by_link_text("Akzeptieren").click()
AttributeError: 'NoneType' object has no attribute 'find_element_by_link_text'
Ответ №1:
Вы можете найти кнопку по текстовому значению.
Попробуйте этот код:
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
PATH = "C:Program Files (x86)chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://member.superfit.club/")
#driver.find_element_by_link_text("Akzeptieren").click()
driver.find_element_by_xpath('//button[contains(text(), "Akzeptieren")]').click()
Комментарии:
1. отлично, спасибо! знаете ли вы какие-либо хитрые способы запуска этого скрипта, когда на мой Gmail приходит конкретное электронное письмо?
2. Для gmail вы можете попробовать Gmail API или подключиться с помощью модуля IMAP. Проверьте эти страницы: API: developers.google.com/gmail/api/quickstart/python IMAP: gist.github.com/robulouski/7441883
Ответ №2:
Код, который вы показываете, не отражает то, что находится в вашей трассировке стека ошибок. По-видимому, вы вызываете find_element_by_link_text
так:
driver.get("https://member.superfit.club/").find_element_by_link_text("Akzeptieren").click()
Когда вы должны делать то, что вы показали сами:
driver.get("https://member.superfit.club/")
driver.find_element_by_link_text("Akzeptieren").click()
Комментарии:
1. отлично, спасибо! знаете ли вы какие-либо хитрые способы запуска этого скрипта, когда на мой Gmail приходит конкретное электронное письмо?
Ответ №3:
Почему бы вам просто не использовать xpath
вместо link text
?
driver.find_element_by_xpath('//*[@id="CookieModelButtom"]/div/div/div/div/button[1]').click()
Это работает отлично. Я рекомендую использовать xpaths
или CSS Selectors
вместо Link Texts
.
Комментарии:
1. отлично, спасибо! знаете ли вы какие-либо хитрые способы запуска этого скрипта, когда на мой Gmail приходит конкретное электронное письмо?
Ответ №4:
find_element_by_link_text
() работает для элемента привязки, а не для элемента кнопки.Элемент, с которым вы взаимодействуете, — это кнопка, поэтому вы идентифицируете либо идентификатор, ИМЯ, XPATH, либо селектор CSS.
Я бы посоветовал вам использовать WebDriverWait()
and element_to_be_clickable
() и следующий css-селектор.
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button.btn.btn-success"))).click()
вам нужно импортировать библиотеки ниже.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC