find_elements()返回False,即使元素存在于页面中



所以我有一个查询列表,我试图过滤查询有谷歌片段。

下面是我的代码:
from selenium import webdriver
PATH = "D:\chromedriver.exe"
driver = webdriver.Chrome(PATH)
with open('queries.txt', 'r', encoding="utf8") as f:
for i, line in enumerate(f):
query = line.replace('n','').replace(' ','+')
url = f"https://www.google.com/search?q={query}&gl=us&hl=en"
driver.get(url)
if(driver.find_elements(By.CLASS_NAME, "V3FYCf")):
print(query)                             
driver.quit()

问题是,有时查询有谷歌片段(类"V3FYCf"存在),但driver.find_elements(By.CLASS_NAME, "V3FYCf")返回False。

我认为这是因为在find_elements()执行之前页面没有完全加载。所以我用WebDriverWait(driver,20).until(EC.presence_of_element_located((By.CLASS_NAME, "V3FYCf"))。但这并没有解决这个问题。

我该如何解决这个问题?非常感谢。

我想打印出有Google snippet的查询。

你可以这样做:

# Needed libs
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
import time
#Open the browser
driver = webdriver.Chrome()
url = f"https://www.google.com/search?q=Isearchsomething&gl=us&hl=en"
driver.get(url)
querys = date = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//h3")))
for query in querys:
print(query.get_attribute("textContent"))

注意事项:

  • presence_of_all_elements_located:将返回一个元素列表,因此您不能打印它们的文本,您可以创建一个循环来打印内容,例如我所做的
  • 不要使用定位器作为By.CLASS_NAME, "V3FYCf"),它们似乎是自动生成的,最好使用更常见的定位器

相关内容

  • 没有找到相关文章

最新更新