[英]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.