python - 如何使用 Selenium 抓取动态网站?出现错误“NoSuchElementException”
问题描述
我刚开始学习Python,NoSuchElementException
在用SELENIUM爬行时遇到了。
我认为目标站点是“动态网页”,因此我搜索了各种方式并尝试了但.....失败了。你能帮我吗?预先感谢
我需要什么:单击下图中的区域并移动到该页面
以下是我制作的代码:
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)
解决方案
要单击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()
浏览器快照
推荐阅读
- python - 无法通过 ISODate 查询 pymongo
- tensorflow - TensorFlow 操作是默认并行执行还是顺序执行?
- reactjs - 在 React js 中单击按钮时重定向到新页面
- opengl-es - 清除/擦除屏幕周围框架的最佳方法?
- react-native - 如何在 menu.item 中实现 onPress?native-base@3.2.1-rc.1
- reactjs - 如何安装 dhtmlx
- python-3.x - 在第 7 行属性错误:“ytdlstream”对象没有属性“url”
- python - 连接 DataFrames,其中 DataFrame1 包含 DataFrame2 的缺失值(特定于列)。DataFrame1 没有 NaN 值
- ios - Swift XCode 中循环的时间延迟
- angular - 如何在角度中减少 mat-form-field-infix 的填充