微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python - Selenium webdriver 超时异常错误 2

如何解决Python - Selenium webdriver 超时异常错误 2

我的目标是从其他网站访问 IMDB 网站并尝试获取电影类型。

这是主页:driver.get("https://sfy.ru/scripts") # main website

注意:您可能会收到“证书无效错误”。请设置您的电脑日期:07/12/2020

这是我的代码

from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://sfy.ru/scripts") #main site

i = 4
driver.find_element_by_xpath("/html/body/div/div[2]/div[1]/p[{}]/a".format(i)).click()

driver.find_element_by_link_text("More info about this movie on IMDb.com").click()


genres = webdriverwait(driver,10).until(EC.presence_of_all_elements_located((By.XPATH,"//h4[.='Genres:']/following-sibling::a")))

aa = (",".join([genre.text for genre in genres]))

print(aa)

错误

---------------------------------------------------------------------------
TimeoutException                          Traceback (most recent call last)
<ipython-input-13-e29dcd0a9a9b> in <module>
     13 
     14 
---> 15 genres = webdriverwait(driver,"//h4[.='Genres:']/following-sibling::a")))
     16 
     17 aa = (",".join([genre.text for genre in genres]))

~\Anaconda3\lib\site-packages\selenium\webdriver\support\wait.py in until(self,method,message)
     78             if time.time() > end_time:
     79                 break
---> 80         raise TimeoutException(message,screen,stacktrace)
     81 
     82     def until_not(self,message=''):

TimeoutException: Message: 

使用此代码的目的是:

i = 4
driver.find_element_by_xpath("/html/body/div/div[2]/div[1]/p[{}]/a".format(i)).click()

页面包含电影列表 (driver.get("https://sfy.ru/scripts"))。通过此处的重定向链接 (driver.find_element_by_link_text("More info about this movie on IMDb.com").click()),我尝试访问 IMDB 页面获取每部电影的类型。

所以,我必须创建一个循环来获取所有电影的类型。这就是我尝试使用该代码的原因。

我应该对代码进行哪些更改?

解决方法

当您单击以获取有关以下内容的更多信息时:

driver.find_element_by_link_text("More info about this movie on IMDb.com").click()

它会在您的 Chrome 网页上打开一个新窗口。因此,您的驱动程序必须切换到这个新窗口。试试这个:

driver.switch_to_window(driver.window_handles[1])

您的其余代码应该可以工作。

,

您必须为 presence_of_all_elements_located() 引入 WebDriverWait 而不是 visibility_of_all_elements_located(),并且您可以使用以下任一 Locator Strategies

  • 使用 XPATH

    print([my_elem.text for my_elem in WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,"//h4[.='Genres:']/following-sibling::a")))])
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。