Как отправить несколько ключевых слов в цикле для поиска с использованием селена и Python? - PullRequest
0 голосов
/ 09 мая 2018

В настоящее время я передаю одно ключевое слово в поле поиска и нажимаю кнопку поиска с помощью селена. Таким образом я получаю правильную страницу. Ниже приведен мой рабочий код для одного ключевого слова.

page = driver.get('my_url')
searchbox = driver.find_elements_by_name('searchterm')[1]

#pass search keywords here
searchbox.send_keys('key1') # single keyword passed
button = driver.find_element_by_xpath("//div[contains(@class, 'submit-btn')]")
button.click()

"""
Extract data from links
"""
div = driver.find_elements_by_class_name('search-result')
links_list = []
for tags in div:
    links = (tags.find_elements_by_css_selector('a'))
    for elem in links:
        links_list.append(elem.get_attribute('href'))

Однако я хочу передать список ключевых слов, чтобы код выполнялся для каждого элемента в списке. Например, если у меня есть список

keys = ['key1', 'key2', 'key3', ...]
for key in keys:
    page = driver.get('my_url')
    searchbox = driver.find_elements_by_name('searchterm')[1]

    #pass search keywords here
    searchbox.send_keys(key) # single keyword passed
    button = driver.find_element_by_xpath("//div[contains(@class, 'submit-btn')]")
    button.click()

    """
    Extract data from links
    """
    div = driver.find_elements_by_class_name('search-result')
    links_list = []
    for tags in div:
        links = (tags.find_elements_by_css_selector('a'))
        for elem in links:
            links_list.append(elem.get_attribute('href'))

Как передать следующее ключевое слово в списке в качестве поискового запроса и выполнить те же операции? Очевидно, я пытался использовать цикл for для перебора списка ключевых слов, но это не работает, так как результаты дают мне результаты поиска только по первому ключевому слову в списке.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Может быть, это будет работать?

keys = ['key1', 'key2', 'key3']
links_list = []

# loop through all keys and search for them
for key in keys:
    searchbox = driver.find_elements_by_name('searchterm')[1]
    searchbox.send_keys(key)
    button = driver.find_element_by_xpath("//div[contains(@class, 'submit-btn')]")
    button.click()

    # go through all the search results per key and add them to the links_list
    div = driver.find_elements_by_class_name('search-result')
    for tags in div:
        links = (tags.find_elements_by_css_selector('a'))
        for elem in links:
            links_list.append(elem.get_attribute('href'))
0 голосов
/ 09 мая 2018

В соответствии с вашим вопросом в настоящее время вы передаете одно ключевое слово в поле поиска и, нажимая кнопку поиска, вы получаете нужную страницу, выполняя это . Теперь, если вы хотите передать список ключевых слов, чтобы код выполнялся для каждого элемента в списке, вы можете объявить Список , например. и передайте список элементов один за другим в цикле следующим образом:

keys = ['Selenium', 'WebDriver', 'guru']
# other lines of code
initial_url = driver.current_url
for key in keys:
    searchbox = driver.find_elements_by_name('searchterm')[1]

    #pass search keywords here
    searchbox.send_keys('key') # single keyword passed
    button = driver.find_element_by_xpath("//div[contains(@class, 'submit-btn')]")
    button.click()

    """
    Extract data from links
    """
    div = driver.find_elements_by_class_name('search-result')
    links_list = []
    for tags in div:
        links = (tags.find_elements_by_css_selector('a'))
        for elem in links:
        links_list.append(elem.get_attribute('href'))
    driver.get(initial_url)
0 голосов
/ 09 мая 2018

Вы можете просто использовать оператор for и перебирать свой список

for key in keys:       
    searchbox.send_keys(key) # single keyword passed
    button = driver.find_element_by_xpath("//div[contains(@class, 'submit-btn')]")
    button.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...