Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过selenium和python找到twitch上视频的href属性?_Python_Selenium_Selenium Webdriver_Css Selectors_Webdriverwait - Fatal编程技术网

如何通过selenium和python找到twitch上视频的href属性?

如何通过selenium和python找到twitch上视频的href属性?,python,selenium,selenium-webdriver,css-selectors,webdriverwait,Python,Selenium,Selenium Webdriver,Css Selectors,Webdriverwait,我正在尝试为特定用户查找所有视频的twitch视频ID。比如在这一页上 所以这里我们链接了所有的视频,但它并没有简单到只抓取html并找到链接,因为它们似乎是动态生成的 所以我听说了硒,并做了类似的事情: from selenium import webdriver # Change path here obviously driver = webdriver.Chrome('C:/Users/Jason/Downloads/chromedriver') driver.get('https

我正在尝试为特定用户查找所有视频的twitch视频ID。比如在这一页上

所以这里我们链接了所有的视频,但它并没有简单到只抓取html并找到链接,因为它们似乎是动态生成的

所以我听说了硒,并做了类似的事情:

from selenium import webdriver

# Change path here obviously
driver = webdriver.Chrome('C:/Users/Jason/Downloads/chromedriver') 
driver.get('https://www.twitch.tv/dyrus/videos/all')
link_element = driver.find_elements_by_xpath("//*[@href]")


for link in link_element:
    print(link.get_attribute('href'))

driver.close()
这会返回页面上的一堆链接,但不会返回视频,我认为它们“更深”,有什么输入吗


提前感谢您使用定位器,您将返回页面上包含
href
属性的每个元素。你可以更具体一点,得到你想要的。切换到CSS选择器

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

# Change path here obviously
driver = webdriver.Chrome('C:/Users/Jason/Downloads/chromedriver') 
driver.get('https://www.twitch.tv/dyrus/videos/all')
links = WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a[data-a-target='preview-card-image-link']")))

for link in links:
    print(link.get_attribute('href'))

driver.close()

这将打印出页面上的40个链接。

我仍然建议进行以下几项更改:

  • 始终以最大化模式打开Web浏览器,以便所有/大部分所需元素都在浏览器中
  • 如果您使用的是Windows操作系统,则需要将扩展名
    .exe
    附加到WebDriver变体名称的末尾,例如chromedriver.exe
  • 在标识元素时,请始终尝试在定位器策略中包含
    class
    属性
  • 始终在
    @Test
    结束时调用
    driver.quit()
    ,优雅地关闭并销毁WebDriver和Web客户端实例
  • 以下是您自己的代码块,包含上述调整:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC    
    
    options = Options()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get('https://www.twitch.tv/dyrus/videos/all')
    link_elements = WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.tw-interactive.tw-link[data-a-target='preview-card-image-link']")))
    for link in link_elements:
        print(link.get_attribute('href'))
    driver.quit()
    
  • 控制台输出:

    https://www.twitch.tv/videos/295314690
    https://www.twitch.tv/videos/294901947
    https://www.twitch.tv/videos/294472813
    https://www.twitch.tv/videos/294075254
    https://www.twitch.tv/videos/293617036
    https://www.twitch.tv/videos/293236560
    https://www.twitch.tv/videos/292800601
    https://www.twitch.tv/videos/292409437
    https://www.twitch.tv/videos/292328170
    https://www.twitch.tv/videos/292032996
    https://www.twitch.tv/videos/291625563
    https://www.twitch.tv/videos/291192151
    https://www.twitch.tv/videos/290824842
    https://www.twitch.tv/videos/290434348
    https://www.twitch.tv/videos/290021370
    https://www.twitch.tv/videos/289561690
    https://www.twitch.tv/videos/289495488
    https://www.twitch.tv/videos/289138003
    https://www.twitch.tv/videos/289110429
    https://www.twitch.tv/videos/288804893
    https://www.twitch.tv/videos/288784992
    https://www.twitch.tv/videos/288687479
    https://www.twitch.tv/videos/288432438
    https://www.twitch.tv/videos/288117849
    https://www.twitch.tv/videos/288004968
    https://www.twitch.tv/videos/287689102
    https://www.twitch.tv/videos/287451192
    https://www.twitch.tv/videos/287267032
    https://www.twitch.tv/videos/287017431
    https://www.twitch.tv/videos/286819343
    

我不知道你到底在找什么。返回的链接指向每个视频的页面。这不是你要找的?你正在寻找直接访问每个视频的途径吗?嗯,我得到了一堆链接,但没有链接到视频,你是否在表单上得到链接href值似乎是指向显示每个视频的页面的链接,你能给出一个从中得到的链接的示例吗?因为我没有一个视频链接,下面Jeffc的回答应该会给你你需要的。谢谢你的回复,我从这段代码中得到了0份打印。links=[]出于某些原因运行此程序后,很抱歉,我运行了几次此程序,它始终有效,但我认为我只是运气好。我认为这是一个时间问题,所以我添加了一个等待,它现在正在工作。代码中有一个括号错误,如果其他人进来查看,您可能希望修复该错误,但除此之外,它工作得很好,谢谢!)如果你知道括号错误在哪里,请修复它或告诉我它在哪里,这样我就可以了。如果这个或任何其他答案有用,请投上一票。一旦找到问题的答案,请将其标记为已接受,这样问题就不会没有答案。