所以我有一个查询列表,我试图过滤查询有谷歌片段。
下面是我的代码: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")
,它们似乎是自动生成的,最好使用更常见的定位器