rem*_*emy 5 firefox proxy webdriver seleniumwire
我正在使用 selenium-wire 和 firefox webdriver 访问网站(在线游戏)。我在本地网络上运行 python 脚本,不需要代理来访问 Internet。
这是我的代码的摘录:
#!C:/Python38-32/python.exe
from seleniumwire import webdriver # Import from seleniumwire
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
# Create a new instance of the Firefox driver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary(r'C:\\Program Files\\Mozilla Firefox\\firefox.exe')
driver = webdriver.Firefox(firefox_binary=binary)
# Go to the home page
driver.get('https://fr0.forgeofempires.com/page/')
iframe = driver.find_element_by_tag_name('iframe')
iframe_switched = driver.switch_to.frame(iframe)
useridInput = driver.find_element_by_id('login_userid')
useridInput.click();
useridInput.send_keys('myuser');
login_passwordInput = driver.find_element_by_id('login_password')
login_passwordInput.click();
login_passwordInput.send_keys('mypass');
loginButton = driver.find_element_by_id('login_Login')
loginButton.click();
defaultContent_switched = driver.switch_to.default_content()
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "play_now_button"))
)
play_nowButton = driver.find_element_by_id('play_now_button')
play_nowButton.click();
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.LINK_TEXT, "ServerName"))
)
Button = driver.find_element_by_link_text('ServerName')
Button.click();
Run Code Online (Sandbox Code Playgroud)
一切正常,直到这一点。该页面现在应该在新的 URL ( https://xxx.forgeofempires.com/game )加载游戏,但它卡住了。如果我按 F5 我得到代理服务器拒绝连接。我转到我的 Firefox 代理设置,注意到它们从No proxy或Use system proxy settings更改为Manual 127.0.0.1。我猜它是硒线为了检查流量而改变的?
我的最终目标是捕获页面生成的 XHR 响应,这就是我使用 Selenium-wire 的原因。
什么可能导致本地主机代理在连接到网站时被阻止?我该如何解决?
如果我更换
from seleniumwire import webdriver # Import from seleniumwire
Run Code Online (Sandbox Code Playgroud)
经过
from selenium import webdriver # Import from selenium
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是我将无法捕捉到 XHR 响应。我也尝试过 mitmproxy,但没有成功。
更新1:
我做了一个完全不工作的例子,它表明 Selenium-wire 做了一些错误的事情。在下面的示例中,无法加载 Google 的结果页面。
#!C:/Python38-32/python.exe
from seleniumwire import webdriver # Import from seleniumwire
#from selenium import webdriver # Import from selenium
from selenium.webdriver.common.keys import Keys
# Create a new instance of the Firefox driver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary(r'C:\\Program Files\\Mozilla Firefox\\firefox.exe')
driver = webdriver.Firefox(firefox_binary=binary)
driver.maximize_window()
# Go to the home page
driver.get('https://www.google.se/')
useridInput = driver.find_element_by_name('q')
useridInput.click();
useridInput.send_keys('test');
driver.find_element_by_name("q").send_keys(Keys.ENTER)
Run Code Online (Sandbox Code Playgroud)
我最后添加了这一行以使其工作:
value = input("SCRIPT ENDED\n")
Run Code Online (Sandbox Code Playgroud)
原因可以在这里和下面找到:
Selenium Wire 的工作原理是透明地将浏览器配置为指向 Selenium Wire 自己的代理服务器。该代理服务器(在上面的示例中运行在 127.0.0.1:49818 上)用于捕获浏览器在 Selenium Wire 运行时发出的请求。Selenium Wire 结束后,它会关闭其代理服务器,因为它认为它已完成。但是,如果浏览器保持打开状态(在上面的示例中似乎就是这种情况),浏览器仍将指向代理服务器。尝试使用浏览器将不起作用,因为代理服务器现在随着 Selenium Wire 的关闭而消失。
如果您希望手动与浏览器交互,则需要通过确保程序不会结束来保持 Selenium Wire 运行。您可能会为此使用 time.sleep(),或者可能使用其他一些机制,例如 input()。
| 归档时间: |
|
| 查看次数: |
3071 次 |
| 最近记录: |