Как успешно изменить User-Agent в скрипте Selenium, написанном на Python?

В настоящее время я использую Selenium для автоматизации поиска Bing через Chrome. Я хочу, чтобы скрипт автоматизировал открытие Chrome с помощью агента пользователя, настроенного на Edge Mobile. Согласно информации в Chrome devtools, User-Agent должен читать:

Mozilla/5.0 (Linux; Android 8.1.0; Pixel Build/OPM4.171019.021.D1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 EdgA/42.0.0.2057

Когда я пытаюсь выполнить поиск через Bing в регулярно открываемом Chrome, при этом я вручную меняю User-Agent на Edge и Mobile, Bing подтверждает, что я выполняю поиск через Edge и мобильный телефон (Bing может отслеживать, где вы искали). Однако, когда я использую свой скрипт, он не распознает, что поиск осуществляется через Edge и мобильный телефон.

Раньше этот сценарий работал, но в последнее время Bing не распознает измененный User-Agent, даже если пользовательский интерфейс изменился. Вот мой полный код:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent
from selenium.webdriver.common.keys import Keys

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
ua = UserAgent()
userAgent = ua.random
print(userAgent)
options.add_argument(f'user-agent={"Mozilla/5.0 (Linux; Android 8.1.0; Pixel Build/OPM4.171019.021.D1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 EdgA/42.0.0.2057"}')
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\_Coding\Selenium\chromedriver.exe')

driver.get('https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=13&ct=1522552641&rver=6.7.6631.0&wp=MBI&wreply=https%3a%2f%2fwww.bing.com%2fsecure%2fPassport.aspx%3frequrl%3dhttps%253a%252f%252fwww.bing.com%252f%253fwlexpsignin%253d1&lc=1033&id=264960&pcexp=false&CSRFToken=94467ae5-f34c-42a8-be9c-964caff9ac54&aadredir=1')
print("Page Title is : %s" %driver.title)
element = driver.find_element_by_xpath("//input[@class='form-control ltr_override input ext-input text-box ext-text-box' and @name='loginfmt']")
element.click()
element.clear()
element.send_keys("[email protected]")

time.sleep(2)

driver.find_element_by_id('idSIButton9').send_keys("\n")

time.sleep(1)

password = driver.find_element_by_xpath("//input[@class='form-control input ext-input text-box ext-text-box' and @name='passwd']")
password.click()
password.clear()
password.send_keys("password")

time.sleep(2)

driver.find_element_by_id('idSIButton9').send_keys("\n")

time.sleep(2)

element = driver.find_element_by_id("sb_form_q")
element.send_keys("BLUE")
element.send_keys(Keys.RETURN)

time.sleep(2)

element = driver.find_element_by_name("q")

element.clear()

element.send_keys("FINISH")
element.send_keys(Keys.RETURN)

time.sleep(1)

driver.quit()

Я считаю, что все мои пакеты и chromedriver обновлены. Интерфейс открывается и выполняет поиск, когда я использую скрипт (и пользовательский интерфейс, по-видимому, меняется на мобильный), но Bing по какой-либо причине не регистрирует этот поиск как мобильный поиск или поиск Edge. Но это работает, когда я открываю Chrome вручную и вручную меняю User-Agent. У меня есть другой скрипт, который делает то же самое без кода User-Agent (поэтому просто выполняет поиск через обычный пользовательский агент Chrome для настольных компьютеров), и Bing распознает это так, как должно (как поиск на рабочем столе).

Вот код ошибки, который я также получаю в командной строке при запуске вышеуказанного скрипта:

DevTools listening on ws://127.0.0.1:65529/devtools/browser/02af2e70-b10a-4d85-9d5d-01e4e828a911
Page Title is : Sign in to Bing
[17928:16612:0826/140206.701:ERROR:device_event_log_impl.cc(208)] [14:02:06.701] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter failed.

Я просто хочу, чтобы скрипт выполнял поиск с помощью пользовательского агента Edge и Android Mobile, что, по-видимому, он и делает, учитывая изменения пользовательского интерфейса Chrome на мобильный при автоматизации тестирования, но Bing не распознает его как таковой. Любые идеи?


person theCrabNebula    schedule 26.08.2020    source источник


Ответы (1)


добавьте это к вашему коду:

driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent":"Mozilla/5.0 (Linux; Android 8.1.0; Pixel Build/OPM4.171019.021.D1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 EdgA/42.0.0.2057", "platform":"Windows"})
person Felipe S.    schedule 27.08.2020
comment
Спасибо за ответ! Куда бы вы добавили этот код? Я пробовал это в нескольких местах, и скрипт даже не запускается :( - person theCrabNebula; 30.08.2020
comment
извините за поздний ответ, просто удалите это из своего кода: from fake_useragent import UserAgent, ua = UserAgent(), userAgent = ua.random, print(userAgent) и запустите, если это не изменит UserAgent, поместите мой код под этот код driver = webdriver.Chrome(chrome_options=options, executable_path=r' - person Felipe S.; 03.09.2020
comment
Спасибо еще раз. Я попробовал ваши предложения, сначала удалив упомянутый вами код и запустив скрипт, а затем добавив ваш код и запустив его. Все варианты технически запускают и запускают автоматизацию с мобильным пользовательским интерфейсом, они просто не регистрируются как поиск Edge/Mobile на стороне Bing, как код в моем исходном посте. Мой исходный код перестал работать несколько недель назад — может быть, виноваты обновления Edge или Chrome? - person theCrabNebula; 06.09.2020