如何让Selenium WebDriver始终打开SoccerWay国际版而非巴西版?
解决Selenium访问SoccerWay国际版自动跳转巴西版的问题
问题描述
我每天早上都会访问SoccerWay网站查看当日赛事,偏好使用国际版(https://int.soccerway.com/)而非巴西版(https://br.soccerway.com/)。常规浏览器里偏好已经保存好不用调整,但用Selenium WebDriver访问时,就算打开国际版链接,页面还是会自动跳转到巴西版。
目前用的临时办法是让WebDriver重复加载两次国际版页面,让网站记录我的偏好:
from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service from os import path def web_driver(): service = Service(log_path=path.devnull) options = Options() options.set_preference("general.useragent.override", my_user_agent) options.page_load_strategy = 'eager' driver = webdriver.Firefox(options=options,service=service) return driver driver = web_driver() driver.get("https://int.soccerway.com/") driver.get("https://int.soccerway.com/")
但页面加载慢的时候这个办法会出问题:没法判断页面什么时候加载完,导致第二次加载后之前的操作(比如滚动、点击)回到页面顶部。试过用Cookie解决,但不知道该用哪些Cookie、怎么配置,想问怎么让WebDriver打开页面后一直保持在国际版?
解决方案
1. 提前注入地区偏好Cookie
SoccerWay靠Cookie记录用户的版本偏好,你可以在首次打开页面之前就把对应Cookie注入进去,直接避免跳转:
- 先在常规浏览器打开国际版,按F12打开开发者工具,切换到「应用」→「Cookie」,找到
https://int.soccerway.com/下的Cookie,关键的一般是preferred_country这类名称,值对应国际版(比如int)。 - 在Selenium里先打开空白页面,再添加Cookie,最后访问国际版:
from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service from os import path def web_driver(): service = Service(log_path=path.devnull) options = Options() options.set_preference("general.useragent.override", my_user_agent) options.page_load_strategy = 'eager' driver = webdriver.Firefox(options=options,service=service) return driver driver = web_driver() # 先打开空白页面,确保能给目标域名添加Cookie driver.get("about:blank") # 添加偏好Cookie,键值请以你实际在浏览器中看到的为准 driver.add_cookie({ "name": "preferred_country", "value": "int", "domain": ".soccerway.com", "path": "/", "secure": True, "httpOnly": False }) # 现在访问国际版就不会跳转了 driver.get("https://int.soccerway.com/")
注意:Cookie的
domain要设为.soccerway.com(带前缀点),这样int和br子域名都能识别;secure根据实际浏览器里的Cookie设置调整,HTTPS站点一般设为True。
2. 优化临时方案:等页面加载完再二次访问
如果暂时找不到准确的Cookie,也可以优化现有办法,等页面关键元素加载完成后再刷新,避免操作失效:
from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service from os import path from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By def web_driver(): service = Service(log_path=path.devnull) options = Options() options.set_preference("general.useragent.override", my_user_agent) options.page_load_strategy = 'eager' driver = webdriver.Firefox(options=options,service=service) return driver driver = web_driver() driver.get("https://int.soccerway.com/") # 等待页面关键元素加载完成,比如顶部导航栏(元素ID根据实际页面调整) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "page-header")) ) # 再重新加载国际版 driver.get("https://int.soccerway.com/")
这样能确保第一次页面已经加载完成、网站记录了偏好后再刷新,不会因为加载慢出问题。
3. 设置浏览器首选语言为英语
部分网站会根据浏览器语言跳转对应版本,你可以在Firefox选项里把英语设为首选语言,降低跳转概率:
def web_driver(): service = Service(log_path=path.devnull) options = Options() options.set_preference("general.useragent.override", my_user_agent) options.page_load_strategy = 'eager' # 设置浏览器首选语言为英语 options.set_preference("intl.accept_languages", "en-US, en") driver = webdriver.Firefox(options=options,service=service) return driver
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

