Python 如何显示所有结果
我的程序运行正常,但不完全正常。我想有所有的链接,但只有4个出现。我试图使用WebDriverWait,但它也不起作用。我也试图让程序等待,但没有成功。如果您直接迭代它并添加一个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
显式等待
,它应该会拉入您要查找的所有项目
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()