繁体   English   中英

无论我如何尝试都无法在Selenium中通过Xpath找到元素

[英]Can't find element by Xpath in Selenium no matter what I try

这是我在Selenium的第一次尝试,我试图创建一个程序来复制剪贴板并将其粘贴到soundcloud下载网站,但更改页面后找不到元素。 这是我的代码:

driver = webdriver.Chrome()
driver.get('https://scdownloader.io/')
driver.set_page_load_timeout(45)

# driver.implicitly_wait(60)
box = driver.find_element_by_xpath("//form/div/input") #text box
box.click()
box.send_keys(Keys.CONTROL, 'v')

nxt = driver.find_element_by_xpath("//form/button") #convert button
nxt.click()

driver.refresh()
driver.implicitly_wait(10) # seconds
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

dl = driver.find_element_by_xpath("//div[@id='conversionForm']/form/button")
dl.click()

问题在于找到dl,我试图解决它的尝试是尝试刷新,尝试使用chrome中的硒插件找到的其他xpath地址,并尝试切换到iframe,但是老实说,我不确定是否有iframe 。

任何帮助将非常感激!

您尝试访问的页面不包含任何iframe。 您无需切换到iframe即可点击下载按钮。

您提供的代码将剪贴板粘贴到输入字段中,然后单击转换按钮。 单击转换按钮会加载另一个未显示转换按钮的URL。 但是您的dl变量包含转换按钮元素引用。 您已再次为dl变量使用了convert按钮的XPath。 单击转换按钮后,下一页将不可见。 这就是为什么找不到按钮的原因。

另外,使用显式等待而不是隐式等待。

以下代码将打印下载链接。 如果发布的链接无效并且没有下载链接,它将打印“ Invalid link”。 result变量包含一个列表。 它用于检查结果是否可见或无异常。 要获取下载链接按钮,请使用resutl[0]

尝试这个:

driver.get('https://scdownloader.io/')
wait = WebDriverWait(driver, 20)

box = wait.until(EC.element_to_be_clickable((By.XPATH,"//div[@id='conversionForm']/form/div/input")))#text box
box.send_keys(Keys.CONTROL, 'v')

nxt = wait.until(EC.element_to_be_clickable((By.XPATH,"//div[@id='conversionForm']/form/button")))#convert button
nxt.click()

wait.until(EC.visibility_of_element_located((By.XPATH,"//div[@id='result']")))

result = driver.find_elements_by_xpath("//div[@class='searchboxholder']//a")

if(len(result)>0):
    print(result[0].get_attribute("href"))
else:
    print("Invalid link")

要使用WebDriverWait,您必须导入以下内容:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM