我正在构建一个机器人,它将根据我选择的随机用户代理来改变它的外观。我从用户代理列表中提取,根据所选的用户代理,我更改网络驱动程序的功能,然后启动它。
但是我正在使用 https://ipleak.net/进行测试,无论我运行此代码多少次,我的真实操作系统仍然显示(而不是所谓的欺骗版本)。下面的相关代码,仅供引用,真实操作系统 = MacIntel
desired_caps = DesiredCapabilities.CHROME.copy()
desired_caps['platform'] = user_agent_os
browser = webdriver.Chrome(options=options, desired_capabilities=desired_caps)
browser.get("https://ipleak.net/")
user_agent_os
的可能值 = 'ios'、'windows'、'andriod'、'---'、'symbian'、'macos'、'linux' 等。每次程序运行时该值都是随机的。
最佳答案
平台属性可以从 WebDriver navigator 中提取。 .
您可以使用以下代码行提取 navigator.platform
的值并在我的 windows-10 上系统:
代码块:
print("platform: "+driver.execute_script("return navigator.platform;"))
控制台输出:
platform: Win32
Navigator platform Property 的可能值是:
Mac68K
MacPPC
MacIntel
Linux i686
Linux armv7l
Win32
Win16
WinCE
SunOS
HP-UX
另一方面,UserAgent即 navigator.userAgent
确实包含 os信息为:
代码块:
print("userAgent: "+driver.execute_script("return navigator.userAgent;"))
控制台输出:
userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
解决方案
改变 platform 的唯一方法UserAgent内的信息是使用 Python 的 fake_useragent
轮换 UserAgent模块。
Chrome
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent
options = Options()
ua = UserAgent()
options.add_argument(f'user-agent={ua.random}')
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
print("userAgent: "+driver.execute_script("return navigator.userAgent;"))
driver.quit()
连续执行3次结果如下:
第一次执行:
userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0
第二次执行:
userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko
第三次执行:
userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
火狐浏览器
from selenium import webdriver
from fake_useragent import UserAgent
useragent = UserAgent()
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", useragent.random)
driver = webdriver.Firefox(firefox_profile=profile, executable_path=r'C:\WebDrivers\\geckodriver.exe')
print("userAgent: "+driver.execute_script("return navigator.userAgent;"))
driver.quit()
连续执行3次结果如下:
第一次执行:
userAgent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10
第二次执行:
userAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17
第三次执行:
userAgent: Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36
tl;博士
您可以在以下位置找到一些关于动态更改用户代理的相关讨论:
关于python-3.x - 如何使用 Selenium 和 Python 更改 useragent 中显示的操作系统信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62928657/