1.我正在使用Selenium在谷歌搜索“圣人释放日期”。
2.如果结果中存在搜索词“发布日期”,我想扫描整个结果页面。
我正在重用我之前的项目中的搜索模式代码,但是那个使用了urllib。所以我不得不稍微调整搜索模式代码。但它没有做我想要的。我被卡住了。有人能指出我正确的方向吗?
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 re
# Version Alpha 3
#_______________________________________________________________________________
browser = webdriver.Chrome(executable_path=r"C:\Selenium_Drivers\chromedriver.exe")
browser.get('http://www.google.com')
input_element = browser.find_element_by_name('q')
input_element.send_keys('sage release dates')
# input_element.send_keys('Wolters Kluwer release dates')
input_element.submit()
'''
RESULTS_LOCATOR = '//div/h3/a'
WebDriverWait(browser, 10).until(
EC.visibility_of_element_located((By.XPATH, RESULTS_LOCATOR)))
page1_results = browser.find_elements(By.XPATH, RESULTS_LOCATOR)
'''
page1_results = browser.find_elements_by_class_name('med')
for item in page1_results:
print(item.text)
#..................................................
keywords = ['release date']
# sequence = page1_results.decode('utf-8', 'ignore')
sequence = page1_results
for k in keywords:
pattern = '(?i)' + k
keyword = re.search(pattern, str(sequence))
if keyword:
# print(keyword.group(0))
print('k-1')
print(k)
print(keyword)
else:
print('k-2')
print('-')
print(k)
print(keyword)
#..................................................
# browser.quit()
您可以简单地创建一个智能xpath来查找搜索结果是否包含带有关键字('sage release dates')文本的元素。例如,检查整个结果页面是否具有以下文本之一或以下任何一个:
这样您就可以改善搜索。但是,如果您不想要其他过滤器,则修改xpath。
如果您想要具有文本'sage release dates'的结果,请使用xpath下面的内容:
//*[contains(text(), 'sage release dates')]
如果您想要仅包含文本“发布日期”的结果,请使用xpath下方:
//*[contains(text(), 'release dates')]
Python中的示例代码段:
from selenium import webdriver
driver.get('http://www.google.com')
elem = driver.find_element_by_name("q")
elem.send_keys("sage release dates")
elem.submit()
allResults = driver.find_elements_by_xpath("//*[contains(text(), 'sage release dates') or contains(text(), 'sage') or contains(text(), 'release') or contains(text(), 'sage release')]")
releaseDateResults = driver.find_elements_by_xpath("//*[contains(text(), 'release date')]")
print len(allResults)
print len(releaseDateResults)
driver.quit()