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

时间:2019-06-23 05:09:18

标签: python selenium

这是我对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。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

尝试一下:

resutl[0]

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

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")