这是我对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。
任何帮助将不胜感激!
答案 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")