首页 > 其他分享 >selenium部分知识点总结

selenium部分知识点总结

时间:2023-04-19 11:33:37浏览次数:32  
标签:总结 知识点 web selenium js result sc div

selenium部分总结

最近写了一个selenium自动化脚本. 基于此总结一些常用的代码

1. 用户输入换行符不终止输入

strings = ''
s = input('请输入:(q停止输入)')
while s != 'q':  # 此处可自行设置
    strings = strings + s + '\n'
    s = input()
    
"""
输入:
B07RW2M73Y
B0943TBH7K
B08NVVWXYL
B0B3STVYGY
B07FT1HSZB
B0BPWYR45Z
B0BDYT8HQ7
q
"""

2.操作stealth.min.js文件隐藏浏览器指纹特征. 避免google反爬

  • 下载stealth.min.js文件
https://gitcode.net/mirrors/requireCool/stealth.min.js/-/blob/main/stealth.min.js
  • 添加到程序中
web = Chrome()
# 读取文件
with open('stealth.min.js', 'r') as f:
js = f.read()
# 调用函数在页面加载前执行脚本
web.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': js})
web.get(url)

3.显示等待

使用场景: 当不确定页面标签什么时候加载出来. 设置太长的睡眠时间又太浪费. 这时候就可以设置显示等待. 等待标签出现. 立刻进行下一步操作

# 显示等待, timeout=120, 每0.5秒检查一次标签是否存在
WebDriverWait(web, 120, 0.5).until(
    # 条件:直到元素加载完成
    EC.presence_of_element_located((By.XPATH,     				       '/html/body/div[1]/div[1]/div[2]/header/div[1]/nav/ul/ul/li[2]/a'))
).click()

4.封装了一个判断页面标签是否存在的函数

def isElementPresent(web, path):
    """
    用来判断元素标签是否存在,
    """
    try:
        web.find_element(By.XPATH, path)
    # 原文是except NoSuchElementException, e:
    except NoSuchElementException as e:
        # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
        return False
    else:
        return True

5. selenium执行js代码

# js点击export
js= """
document.evaluate('/html/body/div[1]/div[2]/div[1]/div[2]/div/div[2]/div/div[2]/div[1]/div[2]/div[2]/div/button', document).iterateNext().click()
"""
web.execute_script(js)
time.sleep(3)
# 清空输入框内容
clear_js = """
const parentElement = document.querySelector('#re-container > div.sc-iYosqi.bzA-dlM > div.sc-JOToA.jJhRrE > div.sc-eSnCNH.enpqfV > div > form > div.sc-dAsQPr.bYouva > div > div'); // 选择父级元素
const spanElements = parentElement.querySelectorAll('#re-container > div.sc-iYosqi.bzA-dlM > div.sc-JOToA.jJhRrE > div.sc-eSnCNH.enpqfV > div > form > div.sc-dAsQPr.bYouva > div > div > span'); // 选择所有的 <span> 子元素

spanElements.forEach(spanElement => {
	parentElement.removeChild(spanElement); // 删除每一个 <span> 子元素
});
"""
web.execute_script(clear_js)

6. 配置无头浏览器

chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
web = Chrome(chrome_options=chrome_options)

7. 图鉴打码(0.002元一次)

# 一、图片文字类型(默认 3 数英混合):
# 1 : 纯数字
# 1001:纯数字2
# 2 : 纯英文
# 1002:纯英文2
# 3 : 数英混合
# 1003:数英混合2
#  4 : 闪动GIF
# 7 : 无感学习(独家)
# 11 : 计算题
# 1005:  快速计算题
# 16 : 汉字
# 32 : 通用文字识别(证件、单据)
# 66:  问答题
# 49 :recaptcha图片识别
# 二、图片旋转角度类型:
# 29 :  旋转类型
#
# 三、图片坐标点选类型:
# 19 :  1个坐标
# 20 :  3个坐标
# 21 :  3 ~ 5个坐标
# 22 :  5 ~ 8个坐标
# 27 :  1 ~ 4个坐标
# 48 : 轨迹类型
#
# 四、缺口识别
# 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
# 33 : 单缺口识别(返回X轴坐标 只需要1张图)
# 五、拼图识别
# 53:拼图识别
def base64_api(uname, pwd, img, typeid):
    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())  # read()字节 => b64字符串
        b64 = base64_data.decode()  # b64字符串是图片
    data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
    result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]
   
result = base64_api(uname='ifeng', pwd='xxxxxx', img="check.png", typeid=1)
print(result)  # 验证码

8. selenium部署到服务器上定时运行

  1. 先写一个执行的脚本book.sh
source /envs/day06/bin/activate  # 打开linux的python虚拟环境
python /root/order-trading-platform/script/test.py
deactivate  # 关闭虚拟环境
  1. 为该脚本添加权限
chmod +x book.sh
  1. 在crontab指定该脚本
  • 先进入crontab编辑
    crontab -e

  • 添加定时任务: 每天六点执行book.sh
    0 6 * * * /root/order-trading-platform/script/book.sh

标签:总结,知识点,web,selenium,js,result,sc,div
From: https://www.cnblogs.com/huxiaofeng1029/p/17332742.html

相关文章

  • Golang 知识点
    make和new的区别:make用于创建切片、映射和通道,返回的是创建类型的引用。new用于创建任意类型的指针,返回的是该类型的指针。//make用法示例slice:=make([]int,5)//创建一个包含5个元素的整型切片//new用法示例varpointer*intpointer=new(int)//创......
  • 动态规划问题总结
    背包问题参考:希望用一种规律搞定背包问题分类排列组合问题\[dp[i]+=dp[i-num[j]]\]判断问题(trueorfalse)\[dp[i]=dp[i]||dp[i-num[j]]\]最大最小问题\[dp[i]=min(dp[i],dp[i-num[j]]+1)\]或者\[dp[i]=max(dp[i],dp[i-num[j]]+1)\]判定与步骤......
  • Python常见问题总结
    对于长期深耕在python爬虫的程序员来说,如何快速解决代码中的问题它是作为合格的程序员应该具备的基本素质。下面将我总结整理出有关python的一些常见问题记录下来方便后期查证。Pythonpython没有多态,而是鸭子类型多继承,没有接口,可通过语法糖实现接口的作用lambda中只能有一句......
  • scrum项目冲刺_day5会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • 4.18学习总结
    用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。【源代码程序】import itertools#输入a=input("请输入整数n和整数m的值:")a1=a.split("")for iin a1[::]:    if i=='':    ......
  • scrum项目冲刺_Day7会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • 每日总结-23.4.18
    <%@pageimport="zhengcechaxun.Pd_zhengce"%><%@pageimport="zhengcechaxun.Thesql"%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>&......
  • js知识点
    目录js知识点js数据类型数组forEach()补充三元运算函数函数的全局变量和局部变量内置对象和方法自定义对象Date对象Date对象的方法JSON对象EegExp对象MAth对象BOM和DOMBOM弹出框计时相关DOM标签查找间接查找节点操作属性节点获取值操作class的操作事件绑定方法js知识点jsjs的......
  • 【Vue】Vue路由总结
    由vue-router模块控制,需要额外安装依赖。参考官网npminstallvue-router--save组成router-link路由跳转,类似a标签,路由跳转作用<router-linkto=""/>router-view路由视图,用于其他组件在该视图位置显示。<router-viewname="name"/><!--可以指定视图名,在路由跳转时......
  • 2023.4.17每日总结
    <!DOCTYPEhtml><html><head><metacharset="utf-8"/><title>首页</title><linkrel="stylesheet"href="css/page.css"/><scripttype="text/......