我希望在 AWS Selenium Canary 中设置自定义用户代理,但不知何故我尝试做的事情不起作用
根据此文档,我应该能够更改/附加字符串到浏览器的用户代理标头...
add_user_agent(user_agent_str)
Appends the value of user_agent_str to the browser's user agent header. You must assign user_agent_str before creating the browser instance.
Example:
synthetics_webdriver.add_user_agent('MyApp-1.0')
这是我的示例代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import selenium.common.exceptions
from aws_synthetics.selenium import synthetics_webdriver
from aws_synthetics.common import synthetics_logger as logger
from aws_synthetics.common import synthetics_configuration
async def main():
synthetics_configuration.set_config(
{
"screenshot_on_step_start": False,
"screenshot_on_step_success": True,
"screenshot_on_step_failure": True
}
)
synthetics_webdriver.add_user_agent('My User Agent String')
driver = synthetics_webdriver.Chrome()
driver.get('myurl.com')
user_agent = driver.execute_script('return navigator.userAgent')
# should be/contain 'My User Agent String' but instead looks like 'CloudWatchSynthetics-arn'
logger.info('This is the user agent string: {}'.format(user_agent))
# selenium python tests
async def handler(event, context):
return await main()
我已经做了很多调试,确保该方法存在,将该方法移动到文件顶部,但我没有运气让它工作
任何帮助将不胜感激,提前致谢。
据我所知,您需要首先创建一个对象来执行
add_user_agent
方法并保存该状态。
我没有环境,请尝试一下,并在评论中告诉我结果。
syn_wdriver = synthetics_webdriver
# syn_wdriver = synthetics_webdriver() # try this one if above does not work, i'm not sure about the syn_webdriver object
syn_wdriver.add_user_agent('My User Agent String')
driver = syn_wdriver.Chrome()
或者:
driver = synthetics_webdriver.add_user_agent('My User Agent String').Chrome()
我再次深入研究自己的代码,意识到我犯了一个简单的错误
这是我的结构
def myfunction():
# my selenium test
myfunction()
但是,当我这样做时,由于某种原因,add_user_agent 函数不会使用字符串注入浏览器用户代理标头
当我将代码更改为这个时
def myfunction():
# selenium tests
webdriver.execute_step('StepName', myfunction)
效果很好...
我确实尝试了 syn_wdriver.add_user_agent('My User Agent String') 但在 syn-python-selenium 2.0 以上的版本中没有成功。
最后,找到了以下与 syn-python-selenium-4.1 一起使用的解决方案。
虽然我没有尝试过所有其他版本的 syn-python-selenium,但你可以尝试类似的方法。
from aws_synthetics.selenium import synthetics_webdriver as syn_webdriver
# Initialize the WebDriver
browser = syn_webdriver.Chrome()
# Inject custom User-Agent (use a method compatible with AWS Synthetics)
browser.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": "MyBot/1.0 (compatible; Mozilla/5.0; Apache-HttpClient +http://www.example.com)"})