python获取ajax网页_Python+Selenium自动抓取Ajax渲染网页

11eb4494ce33

image.png

@前言:

工作闲暇之余自学Python,想找个项目练练手,于是瞄准了我们客户阿里给我们下发任务的网站,往常同事都是手动登录网站,手动复制粘贴Case内容到Excel。Kanshan震惊,都9102年了,怎么还要做这么低效(无脑)的工作,于是自学python尝试自动化获取case内容并且保存到本地,想一想,能有多难???

然鹅:人生第一次认真爬的网页有万万个没想到...

@问题和方法

万万没想到①:不是所有的网站都随便逛的,遇到这种拦路虎怎么办,盘他? AVMS网址

11eb4494ce33

image.png

方法①:先登录网站,拿到cookies,放到headers里面请求网页,发现网页是Ajax渲染的,而且提交方式为post,此路不通。

方法②:selenium模拟登录后获取cookies,保存到本地,每次使用时再调用。先上模拟登录的代码:

@模拟登录

from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

def login():

driver.get(url) #加载页面

#定位输入用户名的表单

username = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#exampleInputUser")))

#定位输入密码的表单

password = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#exampleInputPassword")))

#定位登录的按钮

submit = WAIT.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="login-button"]')))

username.send_keys("XXXX") #引号内为用户和密码

password.send_keys("XXXX")

submit.click() #模拟鼠标点击

driver.refresh() #刷新页面

if __name__ =='__main__':

task_id = input("请输入需要抓取的task_id:")

url = 'http://www.aliavms.cn:7001/tsmanager/index.html#/detail?task_id=' + task_id

pages_string = input("请输入需要抓取得页数:")

pages = int(pages_string)

#options = webdriver.ChromeOptions() #使用chromeless需要的参数

#options.add_argument('headless')

#options.add_argument('disable-gpu')

#driver = webdriver.Chrome(options=options)

driver = webdriver.Firefox()

WAIT = WebDriverWait(driver, 10)

task_name, case_name = login() #为了生成excel名称和sheet表格名称

(下面的获取cookies、保存、读取后来都没有用到)

import os

import json

def get_cookies():

cookies = driver.get_cookies() #webdriver直接获取cookies

def save_cookies(cookies):

with open("cookies.txt", "w") as fp:

json.dump(cookies, fp)

def read_cookie():

if os.path.exists('cookies.text'):

cookies_dict = dict()

with open("cookies.txt", "r") as fp:

cookies = json.load(fp)

for cookie in cookies:

cookies_dict[cookie['name']] = cookie['value']

return cookies_dict

else:

get_cookies()

return read_cookie()

如果是静态网页,那就很简单了

import requests

headers = {

# 假装自己是浏览器

'User-Agent': 'Mozilla/5.0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值