selenium,python点击按钮(编辑为另一个问题)

时间:2018-06-09 21:01:46

标签: python selenium

我解决了下面提到的问题。这次我尝试使用我的脚本使用不同的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()

2 个答案:

答案 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:
      .....