셀레늄 드라이버에 대한 사용자 에이전트 변경
다음 코드가 있습니다 Python
.
from selenium.webdriver import Firefox
from contextlib import closing
with closing(Firefox()) as browser:
browser.get(url)
사용자 에이전트 HTTP 헤더를 인쇄하고 변경하고 싶습니다. 가능할까요?
Selenium에서는 요청 또는 응답 헤더를 읽을 방법이 없습니다. 이러한 종류의 정보를 기록하는 프록시를 통해 연결하도록 브라우저에 지시하면됩니다.
Firefox에서 사용자 에이전트 설정
Firefox 용 사용자 에이전트를 변경하는 일반적인 방법은 "general.useragent.override"
Firefox 프로필에서 변수를 설정하는 것 입니다. 이것은 Selenium과 독립적입니다.
다음과 같이 기본 프로필과 다른 프로필을 사용하도록 Selenium에 지시 할 수 있습니다.
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "whatever you want")
driver = webdriver.Firefox(profile)
Chrome에서 사용자 에이전트 설정
Chrome에서 원하는 것은 user-agent
명령 줄 옵션을 사용하는 것입니다. 다시 말하지만 이것은 셀레늄이 아닙니다. 명령 줄에서 Chrome을 호출 chrome --user-agent=foo
하여 에이전트를 값으로 설정할 수 있습니다 foo
.
Selenium을 사용하면 다음과 같이 설정합니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.add_argument("user-agent=whatever you want")
driver = webdriver.Chrome(chrome_options=opts)
위의 두 방법 모두 테스트를 거쳐 작동하는 것으로 확인되었습니다. 다른 브라우저에 대해서는 잘 모릅니다.
사용자 에이전트 얻기
Selenium에는의 인스턴스에서 사용자 에이전트를 쿼리하는 메서드가 없습니다 WebDriver
. Firefox의 경우에도 사용자 general.useragent.override
정의 값으로 설정하지 않으면 무엇이 될지 확인하여 기본 사용자 에이전트를 찾을 수 없습니다 . (이 설정은 어떤 값으로 설정되기 전에 존재 하지 않습니다 .)
그러나 브라우저가 시작되면 다음을 실행하여 사용자 에이전트를 가져올 수 있습니다.
agent = driver.execute_script("return navigator.userAgent")
agent
변수는 사용자 에이전트가 포함됩니다.
Louis의 유용한 답변을 바탕으로 ...
PhantomJS에서 사용자 에이전트 설정
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
...
caps = DesiredCapabilities.PHANTOMJS
caps["phantomjs.page.settings.userAgent"] = "whatever you want"
driver = webdriver.PhantomJS(desired_capabilities=caps)
유일한 사소한 문제는 Firefox 및 Chrome과 달리 사용자 지정 설정을 반환 하지 않는다는 것입니다 .
driver.execute_script("return navigator.userAgent")
따라서 PhantomJS에서 수행하는 방법을 아는 사람이 있으면 내 답변을 수정하거나 아래에 의견을 추가하십시오! 건배.
이것은 요청 UserAgent를 즉시 변경하는 간단한 솔루션입니다.
Chrome으로 요청의 UserAgent 변경
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Chrome(driver_path)
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent":"python 2.7", "platform":"Windows"})
driver.get('http://amiunique.org')
그런 다음 사용자 에이전트를 반환하십시오.
agent = driver.execute_script("return navigator.userAgent")
일부 출처
SeleniumHQ ( https://github.com/SeleniumHQ/selenium/blob/11c25d75bd7ed22e6172d6a2a795a1d195fb0875/py/selenium/webdriver/chrome/webdriver.py ) 의 webdriver.py 소스 코드 는 Chrome Devtools 프로토콜을 통해 기능을 확장합니다.
def execute_cdp_cmd(self, cmd, cmd_args):
"""
Execute Chrome Devtools Protocol command and get returned result
We can use the Chrome Devtools Protocol Viewer to list more extended functionalities (https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setUserAgentOverride) as well as the parameters type to use.
To build on JJC's helpful answer that builds on Louis's helpful answer...
With PhantomJS 2.1.1-windows this line works:
driver.execute_script("return navigator.userAgent")
If it doesn't work, you can still get the user agent via the log (to build on Mma's answer):
from selenium import webdriver
import json
from fake_useragent import UserAgent
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (UserAgent().random)
driver = webdriver.PhantomJS(executable_path=r"your_path", desired_capabilities=dcap)
har = json.loads(driver.get_log('har')[0]['message']) # get the log
print('user agent: ', har['log']['entries'][0]['request']['headers'][1]['value'])
ReferenceURL : https://stackoverflow.com/questions/29916054/change-user-agent-for-selenium-driver
'developer tip' 카테고리의 다른 글
Twitter Bootstrap 테이블 셀에 collapse.js 사용 [거의 완료] (0) | 2020.12.15 |
---|---|
C ++ 11에서 N 요소 constexpr 배열 만들기 (0) | 2020.12.15 |
Lombok @Builder 및 JPA 기본 생성자 (0) | 2020.12.15 |
Lambda 함수 내에서 직접 Thread # sleep ()을 호출 할 수없는 이유는 무엇입니까? (0) | 2020.12.15 |
오류 : 메소드의 서명 없음 : com.crashlytics.tools.gradle.CrashlyticsPlugin.findObfuscationTransformTask () (0) | 2020.12.15 |