Селен не будет загружать текст ссылки — чего мне не хватает

#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