如何单击<a> elements in an </a> <ul> <a> and </a> <li> <a> elements with selenium using python?

时间:2019-03-13 09:34:02

标签: python selenium web-scraping selenium-chromedriver

I'm scraping a website的列表。我试图单击<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(自己,link_text)中           426元素= driver.find_element_by_link_text('登录')           427“”“       -> 428返回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中的

(自身,依据,值)           (976)           977'using':通过,       -> 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
     

在execute中(self,driver_command,params)           319 response = self.command_executor.execute(driver_command,params)           320如果响应:       -> 321 self.error_handler.check_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中(自身,响应)           240 alert_text = value ['alert']。get('text')           241引发exception_class(消息,屏幕,堆栈跟踪,alert_text)       -> 242引发exception_class(消息,屏幕,堆栈跟踪)           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 :(得分:0)

您只需获取该URL即可。另外,值得注意的是您有基本网址,您只需将连字符的搜索字符串添加到financiar-viajehttps://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)

答案 1 :(得分:0)

使用下面的代码单击链接

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')