Selenium没有这样的元素例外



我正在尝试获取此链接

<ul class="row">                     
<li class="col-md-3 col-xs-12 col-sm-6 episodeLink37027" data-lang-key="1" data-link-id="37027" data-link-target="/redirect/37027" data-external-embed="false">
<div class="generateInlinePlayer">
<a class="watchEpisode" itemprop="url" href="/redirect/37027" target="_blank">
<i class="icon VOE" title="Hoster VOE"></i>
<h4>VOE</h4>
<div class="hosterSiteVideoButton">Video öffnen</div>
...

我已经试过了:

button = driver.find_element_by_css_selector("watchEpisode")

button = driver.find_element_by_class_name("a.watchEpisode")

我总是得到一个没有这样的元素Exception。有其他方法可以获得这个元素吗?

试试这个

button = driver.find_element_by_css_selector("a.watchEpisode")

button = driver.find_element_by_class_name("watchEpisode")

访问此元素之前不要忘记添加延迟/等待
UPD
我没有看到iframe,但定位器可以改进
试试这个代码:

from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
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.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time

CHROMEDRIVER = r"C:UsersNicoDesktopautomate_downloadchromedriver.exe"

driver = webdriver.Chrome(executable_path=CHROMEDRIVER)
driver.maximize_window()
wait = WebDriverWait(driver, 20)
actions = ActionChains(driver)

driver.get("https://anicloud.io/anime/stream/attack-on-titan")
wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@title="Staffel 1 Episode 1"]'))).click()
button = wait.until(EC.presence_of_element_located((By.XPATH, "//li[not(contains(@style,'none'))]//i[@title='Hoster VOE']/..//div[@class='hosterSiteVideoButton']")))
actions.move_to_element(button).perform()
time.sleep(0.5)
#now you can click this element
button.click()

试试这个,看看它是否有效。

button = driver.find_element_by_xpath("//*[@class='watchEpisode']")

也许你可以尝试使用这个css选择器:

div.generateInlinePlayer>a.watchEpisode

或者这个xpath:

//div[@class='generateInlinePlayer']//child::a[@class='watchEpisode']

PS:如果我们在HTML DOM中是否有唯一条目,请检查dev tools(谷歌铬)。

检查步骤:

Press F12 in Chrome->转到element部分->进行CTRL + F->然后粘贴xpath,看看您想要的element是否通过1/1匹配节点突出显示。

要获得href,您可以尝试以下代码:

代码试用1:

time.sleep(5)
val = driver.find_element_by_xpath("//div[@class='generateInlinePlayer']//child::a[@class='watchEpisode']").get_attribute('href')
print(val)

代码试用2:

val = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='generateInlinePlayer']//child::a[@class='watchEpisode']"))).get_attribute('href')
print(val)

代码试用3:

time.sleep(5)
button = driver.find_element_by_xpath("//div[@class='generateInlinePlayer']//child::a[@class='watchEpisode'])
val = driver.execute_script("return arguments[0].value", button)
print(val)

代码试用4:

time.sleep(5)
button = driver.find_element_by_xpath("//div[@class='generateInlinePlayer']//child::a[@class='watchEpisode']")
ActionChains(driver).move_to_element(button).perform()
print(button.get_attribute('href'))

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

最新更新