我解决了下面提到的问题。这次我尝试使用我的脚本使用不同的mp3转换器网站(https://h2converter.com/tr/),因为在之前的网站中,会出现广告弹出窗口。但是,此次Web驱动程序无法找到该按钮,并且程序因超时异常而停止。为了让我的脚本找到按钮"正好",我使用了xpath。我的代码的新版本如下:
driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")
driver.get("https://h2converter.com/tr/")
element = driver.find_element_by_name("video")
element.send_keys("https://www.youtube.com/watch?v=ZobdNXT0Za0", Keys.ENTER)
downloadElem=WebDriverWait(driver,
60).until(EC.presence_of_element_located((By.XPATH,"//*[@id=download']")))
downloadElem.click()
我是Selenium的新手。我编写了一个脚本,可以自动化转换MP3的下载过程。使用driver.find_element_by_css_selector,脚本会出现NoSuchElementException错误。我读了其他提到同样问题的帖子;但是,他们并没有帮助我。我该如何解决?我的代码如下:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")
driver.get("https://www.onlinevideoconverter.com/mp3-converter")
element = driver.find_element_by_name("texturl")
element.send_keys("https://www.youtube.com/watch?v=ZobdNXT0Za0", Keys.ENTER)
driver.find_element_by_css_selector("download-button").click()
答案 0 :(得分:0)
这里有两个问题:(1)你指的是错误的按钮; (2)在按钮可用之前,您不要让浏览器等待。
此处download-button
是 class="download-button"
。 CSS选择器使用点.
作为类规范的前缀,因此您应该写:
driver.find_element_by_css_selector(".start-button").click()
# ^
或者,您可以使用find_element_by_class_name(..)
:
# No dot prefix
driver.find_element_by_class_name("start-button").click()
由于可能需要几秒钟,我们无法立即找到按钮。这可能需要相当长的时间。因此,我们将等待。您可以将程序与time.sleep(..)
放在一起。因此,我们可以将其重写为:
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")
driver.get("https://www.onlinevideoconverter.com/mp3-converter")
element = driver.find_element_by_name("texturl")
element.send_keys("https://www.youtube.com/watch?v=ZobdNXT0Za0", Keys.ENTER)
sleep(5)
driver.find_element_by_class_name("download-button").click()
上面的内容有点耗时:我们眨眼五秒钟,希望弹出按钮。如果过程提前完成,那么我们什么都不等。另一方面,如果处理仍然发生,我们可能会再次运行错误。我们可以更改脚本,然后开始"轮询"直到按钮出现:
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")
driver.get("https://www.onlinevideoconverter.com/mp3-converter")
element = driver.find_element_by_name("texturl")
element.send_keys("https://www.youtube.com/watch?v=ZobdNXT0Za0", Keys.ENTER)
while True:
sleep(0.5)
try:
button = driver.find_element_by_class_name("download-button")
except NoSuchElementException:
pass
else:
button.click()
break
答案 1 :(得分:0)
您必须等待下载按钮可见(在您的情况下需要时间)
有两种选择:
1.手动设置睡眠:
time.sleep(max_seconds_wait)
2。等待动态可见的下载按钮
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
try:
WebDriverWait(self.driver, delay).until(EC.presence_of_element_located((By.ID, 'downloadq')))
except:
.....