Селен не может представить ответ в zhihu.com - PullRequest
1 голос
/ 14 марта 2019

URL: https://www.zhihu.com/question/305744720/answer/557418746

использовать селен не может ответить ответ, только человек

options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
browser = webdriver.Chrome(executable_path='.\chromedriver.exe',chrome_options=options)

button_li = self.browser.find_elements_by_class_name('Button--blue')
if len(button_li) > 2:
    print(len(button_li))
    button_ele = button_li[4]
    button_ele.click()
time.sleep(random.uniform(0.5, 3))
browser.find_element_by_css_selector('div.AnswerForm-editor').click()
time.sleep(random.uniform(0.5, 2))
js="""
var div=document.getElementsByClassName('public-DraftStyleDefault-block')
var text =document.createTextNode("君");
div[0].firstChild.appendChild(text)
"""
self.browser.execute_script(js)
browser.find_element_by_css_selector('Button.Button.AnswerForm-submit').click()

Краткое описание проблемы:

Моя проблема в том, что я успешно написал содержимое в поле для ответов, но меня определили как машину. После этого мои действия на странице, казалось, перестали работать. Как я могу избежать того, чтобы меня идентифицировали как машину, чтобы я мог использовать селен для выбора своего элемента?

1 Ответ

0 голосов
/ 14 марта 2019

Я не уверен, где вы пытаетесь выбрать кнопку отправки, но у меня работал следующий селектор:

browser.find_element_by_css_selector('Button.Button.AnswerForm-submit').click()

Что касается того, чтобы быть обнаруженным как «машина», этого нелегко избежать. Есть несколько способов, как они могут обнаружить вас.

Тем не менее, я обнаружил одну вещь, которая может избежать некоторых попыток обнаружения Селена. Они ищут переменные документа с именами $cdc_ и $wdc_, которые использует селен, а для Chrome это будет $cdc_. Вот что я предлагаю вам попробовать:

  1. Загрузите шестнадцатеричный редактор, если у вас его еще нет. Я использовал один из здесь .

  2. откройте свой chromedriver.exe в шестнадцатеричном редакторе.

  3. Используйте функцию поиска, чтобы найти любой экземпляр $cdc_ или $wdc_ и заменить практически любую другую строку, заканчивающуюся подчеркиванием. Я нашел только один экземпляр $cdc_, и он выглядел так:

    '$cdc_asdjflasutopfhvcZLmcfl_'
    

Я просто заменил его на 'Random_'

Надеюсь, это работает, и теперь вы можете беспрепятственно проходить по сайту. Если нет, попробуйте некоторые из следующих действий; единственная проблема в том, что может сломать ваш файл chromedriver, чтобы тесты больше не работали. Но, возможно, стоит попробовать, и если он все-таки сломается, вы можете легко загрузить новый.

  1. Найдите в документе любое использование слов 'selenium', 'webdriver' или 'chromedriver' и удалите их. Это еще один способ, которым сайт может сказать, что вы используете селен.

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

...