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()




Вы можете просто создать интеллектуальный xpath, чтобы определить, есть ли в результатах поиска элементы с текстом ключевого слова ('sage release Date'). Например, проверьте, есть ли на всей странице результатов один из следующих текстов или любой из следующих:
Таким образом вы сможете улучшить свой поиск. Однако вы можете изменить 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()
Для запроса с учетом регистра вы можете использовать функцию перевода. Для xpath: // * [contains (text (), 'release date') или contains (text (), 'SAGE Release')] до // * [contains (text (), 'release date') или содержит (text (), translate ('дата выпуска', 'relasdt', 'RELASDT')) или содержит (text (), 'SAGE Release') или содержит (text (), translate ('SAGE Release', 'sagerl' , 'САГЕРЛЬ'))]
Дополнительный вопрос. Как сделать поиск по xpath нечувствительным к регистру? . <br>
all_results = browser.find_elements_by_xpath( "//*[contains(text(), 'release date') or contains(text(), 'SAGE Release')]"). <br>for item in all_results: print(item.text)