Как нажать «Возврат» с помощью Splinter

Я не могу понять, как нажать «возврат», когда я заставляю библиотеку Splinter вводить текст в основную панель поиска Reddit, и, поскольку у нее нет кнопки для поиска, я, вероятно, должен нажать «возврат».

Я видел аналогичный вопрос здесь, но он не сработал для моего случая, а также для случая, для которого человек написал ответ.

class NavigationPage(object):

    def __init__(self, br):
        self.br = br
        self.url = "http://reddit.com"

    @property
    def retrieve_reddit_search_bar(self):
        """
        Retrieves search bar by it's name
        """
        return self.br.find_by_name("q")

    def search(self, search_term):
        self.retrieve_reddit_search_bar.first.fill(search_term) # fills search bar
        self.br.execute_script("document.getElementsByName('q')[0].submit()")

Сбой трассировки во время второго оператора в методе поиска. Если кто-то знает, как это сделать, можете ли вы также показать мне, как применить этот бизнес с «возвратным» кликом на всех веб-сайтах? Я предполагаю, что они выполняют аналогичный javascript для обработки поискового запроса.


person Contempt    schedule 25.05.2014    source источник


Ответы (2)


Хорошо, это показалось интересным. Мысль возникла из ниоткуда, но вот она:

Нажатие клавиши «Возврат» эквивалентно символу «\n». Это означает, что каждый поисковый запрос должен заканчиваться символом новой строки. При этом автоматически нажимается клавиша возврата, и я попадаю в результаты поиска на Reddit!

Итак, команда будет выглядеть так:

b = Browser()
b.visit('http://reddit.com')
b.fill('q', 'intp\n')

И вы перейдете к результатам поиска, поскольку селен / осколок заполняет поисковый запрос.

person Contempt    schedule 26.05.2014

Я обнаружил, что '\r' может заменить '\n', потому что следующий код также работает:

b = Browser()    
b.visit('http://reddit.com')
b.fill('q', 'intp\r')

Он также работает с функцией типа:

b = Browser()    
b.visit('http://reddit.com')
b.type('q', 'intp\r')

Похоже, что это реализовано самим Selenium, потому что следующий код, который напрямую вызывает команды Selenium, также ведет себя так же:

b = Browser() 
b.visit('http://reddit.com')
element = b.driver.find_element_by_css_selector('[name={}]'.format('q'))
element.send_keys('intp\r')

Этот сообщение также упоминает об этом.

person ldiary    schedule 02.11.2015