Python 如何显示所有结果

Python 如何显示所有结果,python,selenium,Python,Selenium,我的程序运行正常,但不完全正常。我想有所有的链接,但只有4个出现。我试图使用WebDriverWait,但它也不起作用。我也试图让程序等待,但没有成功。如果您直接迭代它并添加一个显式等待,它应该会拉入您要查找的所有项目 import sys from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWa

我的程序运行正常,但不完全正常。我想有所有的链接,但只有4个出现。我试图使用WebDriverWait,但它也不起作用。我也试图让程序等待,但没有成功。

如果您直接迭代它并添加一个
显式等待
,它应该会拉入您要查找的所有项目

import sys

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
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import time



def main():
    driver = configuration()
    motcle = sys.argv[1]
    recherche(driver,motcle)

def configuration():
    """
    Permet de faire la configuration nécessaire pour faire le scrapping
    :return: driver
    """

    path = "/usr/lib/chromium-browser/chromedriver"
    driver = webdriver.Chrome(path)
    driver.get("https://www.youtube.com/")
    return driver
def recherche(driver,motcle):
    actionChain = ActionChains(driver)
    search = driver.find_element_by_id("search")
    search.send_keys(motcle)
    search.send_keys(Keys.RETURN)
    driver.implicitly_wait(20)
    content =  driver.find_elements(By.CSS_SELECTOR, 'div#contents ytd-item-section-renderer>div#contents a#thumbnail')
    driver.implicitly_wait(20)
    links = []
    for item in content:
        links+= [item.get_attribute('href')]
    print(links)

    time.sleep(5)
if __name__ == '__main__':
    main()
您可以摆脱
隐式\u wait
调用


我用搜索词“Python”对此进行了测试它将所有25个以上的href链接拉入列表

这里的问题是
驱动程序。使用定义的
驱动程序查找\u元素
。隐式地\u wait
等待至少1个与传递的定位器匹配的web元素出现,然后立即返回与该定位器匹配的web元素列表。
它不会等待与该定位器匹配的所有元素。
预期条件下的问题与此完全相同。所有元素的可见性 在这里,我可以建议您使用预期条件来显示第一个元素,然后设置一些睡眠以使所有其他元素加载,然后获取元素列表。
因此,您的代码将如下所示:

wait = WebDriverWait(driver, 20)

links = []

for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'div#contents ytd-item-section-renderer>div#contents a#thumbnail'))):
    links.append(item.get_attribute('href'))

此外,不建议使用
驱动程序。隐式等待
,如果您仍然希望使用它,则无需反复定义if。一旦定义,它将为web驱动程序的整个会话定义。

你说得不对!所定位的所有元素的预期条件
可见性\u
查找元素
的工作方式完全相同,具有
隐式等待
:一旦找到至少一个与传递的定位器匹配的元素,它将返回捕获元素的列表!谢谢你的邀请answer@Prophet嗯,这对我来说很好,但他的代码却不行。你是这里的天才,所以我希望你得到你渴望的分数。对不起,我不是有意伤害你的。只是想教你一些你可能还不知道的东西。而且我还远远不是天才。我在这里看到很多人比我更专业、更聪明。顺便说一句,我的答案一点也没有得到分数:)谢谢你的回答。它现在起作用了吗?是的,非常感谢。如果是,请接受答案。顺便说一句,它也会给你2分:)
import sys

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
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import time



def main():
    driver = configuration()
    motcle = sys.argv[1]
    recherche(driver,motcle)

def configuration():
    """
    Permet de faire la configuration nécessaire pour faire le scrapping
    :return: driver
    """

    path = "/usr/lib/chromium-browser/chromedriver"
    driver = webdriver.Chrome(path)
    driver.implicitly_wait(20)
    driver.get("https://www.youtube.com/")
    return driver
def recherche(driver,motcle):
    actionChain = ActionChains(driver)
    search = driver.find_element_by_id("search")
    search.send_keys(motcle)
    search.send_keys(Keys.RETURN)
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'div#contents ytd-item-section-renderer>div#contents a#thumbnail')))
    time.sleep(5)
    content =  driver.find_elements(By.CSS_SELECTOR, 'div#contents ytd-item-section-renderer>div#contents a#thumbnail')
    links = []
    for item in content:
        links+= [item.get_attribute('href')]
    print(links)

    time.sleep(5)
if __name__ == '__main__':
    main()