1。 我正在使用Selenium在Google中搜索“鼠尾草发布日期” 。
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()
答案 0 :(得分:1)
您可以简单地创建一个智能xpath来查找搜索结果是否包含带有关键字(“发布日期”)文本的元素。例如,检查整个结果页面是否包含以下文本之一或以下任何文本:
这样,您可以改善搜索。但是,如果不想使用其他过滤器,则可以修改xpath。
如果您想要包含文本“ sage发布日期”的结果,请在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()