Как щелкнуть по списку элементов <a>в элементах <ul>и <li>с селеном, используя python? - PullRequest
0 голосов
/ 13 марта 2019

Я очищаю веб-сайт .Я пытаюсь щелкнуть ссылку под <li>, но она выдает NoSuchElementException исключение.

И ссылки, которые я хочу щелкнуть:

enter image description here

Я использую следующий код:

from selenium import webdriver
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('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('window-size=5000x2500')
webdriver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
url = "https://www.cofidis.es/es/creditos-prestamos/financiacion-coche.html"
webdriver.get(url)
webdriver.find_element_by_xpath('//*[@id="btncerrar"]').click()
time.sleep(5)
webdriver.find_element_by_link_text('Préstamo Coche Nuevo').click()
webdriver.save_screenshot('test1.png')

Ошибка, которую я получил:

/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:10: DeprecationWarning: use options instead of chrome_options
  # Remove the CWD from sys.path while we load stuff.

---------------------------------------------------------------------------

NoSuchElementException                    Traceback (most recent call last)

<ipython-input-44-f6608be53ab3> in <module>()
     13 webdriver.find_element_by_xpath('//*[@id="btncerrar"]').click()
     14 time.sleep(5)
---> 15 webdriver.find_element_by_link_text('Préstamo Coche Nuevo').click()
     16 webdriver.save_screenshot('test1.png')

/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py

в find_element_by_link_text (self, link_text) 426 element = driver.find_element_by_link_text ('Sign In') 427 "" "-> 428 return self.find_element (by = By.LINK_TEXT, value = link_text) 429 430 def find_elements_by_link_text (self, text):

/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py

в find_element (self, by, value) 976 возвращает self.execute (Command.FIND_ELEMENT, {977 'using': by, -> 978 'value': value}) ['value'] 979 980 def find_elements (self,by = By.ID, value = None):

/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py

in execute (self, driver_command, params) 319 response = self.command_executor.execute (driver_command, params) 320, если ответ: -> 321self.error_handler.check_response (response) 322 response ['value'] = self._unwrap_value (323 response.get ('value', None))

/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py

в check_response (self,ответ) 240 alert_text = значение ['alert']. get ('text') 241 повысить класс_ исключения (сообщение, экран, stacktrace, alert_text) -> 242 повысить класс_ исключений (сообщение, экран, трассировка стека) 243 244 def _value_or_default (self,obj, key, default):

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"Préstamo Coche Nuevo"}
  (Session info: headless chrome=72.0.3626.121)
  (Driver info: chromedriver=72.0.3626.121,platform=Linux 4.14.79+ x86_64)

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Используйте код ниже, чтобы перейти по ссылке

webdriver.find_element_by_css_selector("#ei_tpl_navertical li>a[data='16736']").click()

Используйте неявное / явное ожидание, чтобы убедиться, что ваш элемент готов к взаимодействию. в вашем случае:

webdriver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
url = "https://www.cofidis.es/es/creditos-prestamos/financiacion-coche.html"
webdriver.get(url)
webdriver.implicitlyWait(20)
webdriver.find_element_by_id('btncerrar').click()
time.sleep(5)
webdriver.find_element_by_css_selector("#ei_tpl_navertical li>a[data='16736']").click()
webdriver.save_screenshot('test1.png')
0 голосов
/ 13 марта 2019

Вы можете просто взять этот URL и добраться до него. Также стоит отметить, что у вас есть базовый URL, вы можете просто добавить строку поиска с дефисами, т.е. financiar-viaje на основе https://www.cofidis.es/es/creditos-prestamos/

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

url = 'https://www.cofidis.es/es/creditos-prestamos/financiacion-coche.html'
driver = webdriver.Chrome()
driver.get(url)
url =  WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "[href*='financiar-viaje']"))).get_attribute('href')
driver.get(url)
...