我正在刮一个website。我试图点击<li>
下的链接,但它抛出NoSuchElementException
异常。
我要点击的链接:
我正在使用以下代码:
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
in 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'使用':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 if response: - > 321 self.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
in check_response(self,response)240 alert_text = value ['alert']。get('text')241 raise exception_class(message,screen,stacktrace,alert_text) - > 242 raise exception_class(message,screen,stacktrace)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)
你可以简单地抓住那个网址并进入它。此外,值得注意的是,你有一个基本网址,你可以简单地添加连字符搜索字符串,即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)
使用下面的代码点击链接
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')