首页 > 解决方案 > 如何使用 Selenium 抓取动态网站?出现错误“NoSuchElementException”

问题描述

我刚开始学习Python,NoSuchElementException在用SELENIUM爬行时遇到了。

我认为目标站点是“动态网页”,因此我搜索了各种方式并尝试了但.....失败了。你能帮我吗?预先感谢

目标网站:http ://www.kofiabond.or.kr/index_en.html

我需要什么:单击下图中的区域并移动到该页面

在此处输入图像描述

以下是我制作的代码:

from selenium import webdriver

driver=webdriver.Chrome('C:/Users/SMH/chromedriver.exe')

url='http://www.kofiabond.or.kr/index_en.html'

driver.get(url)

driver.maximize_window()

xpath = "//*[@id='genLv1_0_imgLv1']"

open_btn=driver.find_element_by_xpath(xpath)

driver.execute_script(open_btn)

标签: pythonseleniumxpathiframewebdriverwait

解决方案


要单击Final Quotation Yields存在于其中的链接,iframe您需要先切换iframe到页面上的hover on the main menu元素visible,然后单击element

诱导WebDriverWait()并等待frame_to_be_available_and_switch_to_it()

诱导WebDriverWait()并等待visibility_of_element_located() 并悬停在元素上

诱导WebDriverWait()并等待element_to_be_clickable()


代码:

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
from selenium.webdriver import ActionChains

driver=webdriver.Chrome("C:/Users/SMH/chromedriver.exe")
driver.get('http://www.kofiabond.or.kr/index_en.html')
#Switch to iframe
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.NAME, 'fraAMAKMain')))
element=WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//a[./img[@alt='bond Interest Rates']]")))
#Hover main menu
ActionChains(driver).move_to_element(element).perform()
#Click on the element once become clickable
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[./div[text()='Final Quotation Yields']]"))).click()

浏览器快照

在此处输入图像描述


推荐阅读