我在抓取使用的网站时遇到一些困难react.js
并且不知道为什么会发生这种情况。
This is the html of the website:
我想做的是点击带有class: play-pause-button btn btn -naked
。但是,当我使用 Mozilla gecko webdriver 加载页面时,会抛出异常:
Message: Unable to locate element: .play-pause-button btn btn-naked
这让我觉得也许我应该做点别的事情来获得这个元素?
到目前为止,这是我的代码:
driver.get("https://drawittoknowit.com/course/neurological-system/anatomy/peripheral-nervous-system/1332/brachial-plexus---essentials")
# execute script to scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
time.sleep(10)
soup = BeautifulSoup(driver.page_source, 'lxml')
print(driver.page_source)
play_button = driver.find_element_by_class_name("play-pause-button btn btn-naked").click()
print(play_button)
有谁知道我该如何解决这个问题?任何帮助深表感谢
看来你很接近。使用时find_element_by_class_name()
you can't通过多个classes并且你只能通过一个班级名称,即只有以下其中之一:
play-pause-button
btn
btn-naked
通过多个班级时find_element_by_class_name()
你将面临消息:无效的选择器:不允许复合类名
Solution
作为替代方案,由于该元素是Angular元素,至click()
关于你必须诱导的元素WebDriver等待为了element_to_be_clickable()
您可以使用以下任一方法定位策略:
-
Using CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.play-pause-button.btn.btn-naked")))click()
-
Using XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='play-pause-button btn btn-naked']")))click()
-
Note:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)