首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同一个脚本中的多个seleniumwire请求

同一个脚本中的多个seleniumwire请求
EN

Stack Overflow用户
提问于 2020-09-15 20:30:47
回答 1查看 632关注 0票数 0

我正在运行一个Python脚本,它执行以下操作:

  • Open
  • login与登录表单
  • 进行游戏,等待页面加载(获取Json响应的Ajax、

  • 几次点击按钮,其中触发ajax请求

H 111需要读取json响应的Ajax请求。这就是我的问题is

  • Write文件

的地方

我的问题是我无法捕捉到第二轮Ajax请求,在搜索时找不到任何解决方案。

我的代码是这样的:

代码语言:javascript
复制
import sys
import json
import time

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.common.exceptions import TimeoutException
from selenium.webdriver import ActionChains

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.get(myURL)

# Login code here

loginButton = driver.find_element_by_id('login_Login')
loginButton.click();

for request in driver.requests:     # Initial page loading
    if "login_check" in request.path:
        if request.response:
            response_body = json.loads(request.response.body)
            for key, value in response_body.items():
                if key == 'success':
                    if value is False:
                        # do some stuff and write to file
                        #driver.quit()
                        break
                    else:
                        defaultContent_switched = driver.switch_to.default_content()

                        try:
                            # do some stuff and write to file
                            
                        except TimeoutException:
                        
                            canvas = driver.find_element_by_tag_name('canvas')
                            canvas.click();
                            #click on a few elements        

                            for request in driver.requests:
                                if "/game/json" in request.path:
                                    print(request.path);    # At this point I only see the requests of the initial load of the page
                                    if request.response:
                                        # Need to do stuff here...
                                    break
            break
        break

print(json.dumps(output))
driver.quit()

在点击画布之后,我如何再开始收听网络呢?

EN

回答 1

Stack Overflow用户

发布于 2020-09-16 07:06:05

只要有页面加载或某些内容加载,就可以在Ajax加载函数下面使用,等待Ajax加载完成。

代码语言:javascript
复制
#Wait webpage to fully load 
def ajaxwait():
    for i in range(1, 30):
        x = driver.execute_script("return (window.jQuery != null) && jQuery.active")
        time.sleep(1)
        if x == 0:
            print("All Ajax element loaded successfully")
            break
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63909430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档