python 爬虫 selenium 笔记

todo
  1. 阅读并熟悉 Xpath, 这个与 Selenium 密切相关、
selenium
  1. selenium 加入无图模式,速度快很多。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options# selenium 无图模式,速度快很多。
option = Options()
option.page_load_strategy = "none"
prefs = {"profile.managed_default_content_settings.images": 2}  # 设置无图模式
option.add_experimental_option("prefs", prefs)  # 加载无图模式设置driver = webdriver.Chrome(chrome_options=option)
  1. 遇到 BeautifulSoup iframe
  • 一种解决方案是, 获得iframe的src属性,然后请求并解析其内容:
  • 另一种是:
driver.get(url)
iframe = driver.find_elements_by_tag_name('iframe')[1]
driver.switch_to.frame(iframe) # 最重要的一步
soup = BeautifulSoup(driver.page_source, "html.parser")
个人常犯的错误, 误区,陷阱
  1. driver.execute_script(JS) 这个才是执行 JS,
    注意是 execute_script, 不是 execute。
页面等待。这个是比较关键的。
  1. 显式等待。貌似比较麻烦,且不常用。
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))
  1. 隐式等待。推荐使用。

driver.implicitly_wait(10) # seconds

定位元素
  1. 定位元素之前,加上这句话,笔记安全。

bot.implicitly_wait(10) # 这句话很关键。

  1. 查找元素的方法
find_element_by_id()
find_element_by_name()              # 这个name 是标签里面的一种属性。
find_element_by_xpath()             
find_element_by_link_text()         # 比如  'Sign In'
find_element_by_partial_link_tex()      
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_css_selector()
基本配置,导包
import os
import random
import json
import pickle
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import pyautogui as pt
import pyperclip
切换frame
  1. 遇到 iframe,最好是切换过去, 见 https://blog.csdn.net/huilan_same/article/details/52200586

driver.switch_to.frame(0) # 1.用frame的index来定位,第一个是0

点击元素。不可点击的元素, 执行下面的方法。
def real_click(self, driver, ele):actions = ActionChains(driver)actions.move_to_element(ele)actions.click(ele)actions.perform()
执行 js, 页面滚动
# 先滚动到底部,然后再滚动到顶部
# window.scrollTo(0,document.body.scrollHeight);js = "var q=document.documentElement.scrollTop=500"
bot.execute_script(js)js2 = "document.body.scrollTop=document.documentElement.scrollTop=0;"
bot.execute_script(js2)
填写表格。这个需要再读读看。
element = driver.find_element_by_xpath("//select[@name='name']")
choices = element.find_elements_by_tag_name("option")
for c in choices:print("Value is: %s" % c.get_attribute("value"))c.click()
封装一些自己常用的方法
@staticmethod
def save_html(bot):             # 保存 htmlfilename = 'ret.html'data = bot.page_sourcewith open(filename, 'w') as f:f.write(data)print("保存 html 完成!")@staticmethod
def real_click(driver, ele):    # 点击元素actions = ActionChains(driver)actions.move_to_element(ele)actions.click(ele)actions.perform()@staticmethod
def send_word(ele, word):       # 输入框,输入文字ele.clear()ele.send_keys(word)ele.send_keys(Keys.RETURN)
源码中有趣的,有用的方法

Driver

  1. driver.current_url # 本身就是静态方法
  2. driver.page_source
  3. driver.save_screenshot(‘foo.png’)
  4. driver.get_log(‘driver’)
  5. driver.page_source # 保存 html 源码,功本地调试,减少网络请求
  6. driver.title 直接获取页面的标题, 很适合作为文件名。

WebElement

  1. ele.id # 直接就可以用
  2. ele.get_attribute(“class”) # 这个很常用的。

个人接单,python, R语言,有事请私聊

老哥,支持一下啊。

支付宝扫码领红包哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144024.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024 go-zero社交项目实战

背景 一位商业大亨,他非常看好国内的社交产品赛道,想要造一款属于的社交产品,于是他找到了负责软件研发的小明。 小明跟张三一拍即合,小明决定跟张三大干一番。 社交产品MVP版本需求 MVP指:Minimum Viable Product&…

【C语言二级考试】循环结构设计

C语言二级考试——循环结构程序设计 五.循环结构程序设计 1.for循环结构 2.while和do-while循环结构 3.continue语句和break语句 4.循环的嵌套 知识点参考【C语言】循环-CSDN博客 文章目录 1.for循环2.while和do-while循环结构3.continue语句和break语句4.循环的嵌套 1.for循环…

阿里云容器服务Kubernetes部署新服务

这里部署的是前端项目 1.登录控制台-选择集群 2.选择无状态-命名空间-使用镜像创建 3.填写相关信息 应用基本信息: 容器配置: 高级配置: 创建成功后就可以通过30006端口访问项目了

【测向定位】差频MUSIC算法DOA估计【附MATLAB代码】

​微信公众号:EW Frontier QQ交流群:554073254 摘要 利用多频处理方法,在不产生空间混叠的情况下,估计出高频区域平面波的波达方向。该方法利用了差频(DF),即两个高频之间的差。这使得能够在可…

视觉语言大模型模型介绍-CLIP学习

多模态学习领域通过结合图像和文本信息,为各种视觉语言任务提供了强大的支持。图像和文本的结合在人工智能领域具有重要的意义,它使得机器能够更全面地理解人类的交流方式。通过这种结合,模型能够处理包括图像描述、视觉问答、特征提取和图像…

多线程---线程的状态及常用方法

1. 线程的状态 在Java程序中,一个线程对象通过调用start()方法启动线程,并且在线程获取CPU时,自动执行run()方法。run()方法执行完毕,代表线程的生命周期结束。 在整个线程的生命周期中,线程的状态有以下六种&#xff…

前海桂湾的海边免费停车场

​前海很多打工人晚上加班前海边散步的地方。相信很多前海打工人都曾经路过这个免费的停车场。坐标出于滨海大道的断头路区域。 看卫星地图可以发现,是个断头路,但是面积还是很大,停个几十辆车没问题。我就停过一次,周末带娃来这里…

ESP8266+使用串口1打印LOG+释放串口0

Menuconfig配置 具体的位置位于Component config > Common ESP-related 配置后,串口0上电还是会打印一些信息,除此之外就不打印了。 ets Jan 8 2013,rst cause:2, boot mode:(3,6)load 0x40100000, len 7792, room 16 tail 0 chksum 0x44 load 0…

Lab2 【哈工大_操作系统】操作系统的引导

本节将更新哈工大《操作系统》课程第二个 Lab 实验 操作系统的引导。按照实验书要求,介绍了非常详细的实验操作流程,并提供了超级无敌详细的代码注释。文末附完整 bootsect.s 和 setup.s 标准答案代码以及超详细注释。 实验目的: 熟悉 hit-o…

C语言中的assert断言

Assert断言 断言是程序中处理异常的一种高级形式。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。 用法: #…

AD域控服务器

1.AD域控服务器安装 2.客户端Windows10加入域环境 3.组织单位OU和域用户创建 目的是分部门管理用户和使用域用户登录客户端 4.域用户安全策略 5.当客户端密码锁住了,管理员解锁账户。 6.只允许域用户使用自己的电脑 7.域策略 7.1统一客户端桌面壁纸 7.2重定向用户配置文件路径…

软件设计画图,流程图、甘特图、时间轴图、系统架构图、网络拓扑图、E-R图、思维导图

目录 一、流程图 二、甘特图 三、时间轴图 四、系统架构图 五、网络拓扑图 六、E-R图 七、思维导图 一、流程图 是一种用符号表示算法、工作流或流程的图形。用不同的图形表示不同含义,如椭圆表示开始和结束、菱形表示判断等。 画图工具WPS office 应用市场…

如何使用ssm实现基于vue.js的购物商场的设计与实现+vue

TOC ssm616基于vue.js的购物商场的设计与实现vue 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本…

如何使用ssm实现基于ssm框架的车辆出租管理系统+vue

TOC ssm643基于ssm框架的车辆出租管理系统vue 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域…

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述:1767.寻找没有被执行的任务对 表:Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

7iDU AMP田岛绣花机驱动器维修0J2100400022

7iDU AMP神州田岛绣花机驱动器维修0J2101300000绣花机控制器等全系列型号均可处理。 田岛7iDU AMP是田岛绣花机中使用很广的一种5相驱动器,在田岛平绣车TMEF-H,TMFD中应用,在链条车TMCE112S,和盘带车TMLG中大量使用。其采用的东芝…

面试或工作中的经典问题共享

前言:大家可以把面试或工作中遇到了经典问题共享一下,我们共同学习成长,金九银十,祝各位都能步步高升! 文档大家可以往下追加,请勿删除他人编写的内容哦。我会把问题的相关资料进行补充,以便各…

HTB-Blue(永恒之蓝漏洞复现)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Blue靶机 渗透过程 信息搜集 服务器开放了smb服务,漏洞探测显示 具有ms17_010(永恒之蓝漏洞) 利用永恒之蓝 搜索永恒之蓝漏洞 use使用永恒之蓝漏洞 rhost //对方主机 lhost //回连主机 …

[学习笔记]树链剖分(简易版) 及其LCA

树链剖分 先讲解一下一些基础定义(都是在树上) 重儿子: 一个节点中所有儿子中子树大小最大的一个儿子(每个节点最多有一个重儿子)轻儿子: 一个节点除重儿子外所有的节点重链: 若干个重儿子组成的链链顶: 一条链中深度最小的节点 以下图为例子 (红色连续线段为重链) 对于节点…

【LabVIEW】事件结构的用法

本篇文章记录我学习LabVIEW的事件结构用法,希望我的分享对你有所帮助! 目录 一、案例说明 1、 LabVIEW实现“YAXBXC的计算” 2、添加事件结构 一、案例说明 在LabVIEW实现“YAXBXC的计算”的基础上,加上事件结构,实现单击一次按…