python爬虫(三)----Selenium

目录

[1. Selenium](#1. Selenium)

[1.1 Selenium是啥](#1.1 Selenium是啥)

[1.2 安装chrom Driver](#1.2 安装chrom Driver)

[1.3 selenium 使用](#1.3 selenium 使用)

[1.4 selenium元素定位](#1.4 selenium元素定位)

[1.5 访问元素信息](#1.5 访问元素信息)

[1.6 交互](#1.6 交互)

[2. Phantomjs、Chrom handless](#2. Phantomjs、Chrom handless)


1. Selenium

1.1 Selenium是啥

自动化Web浏览器操作

主要用于Web应用程序的测试

支持多操作系统、多浏览器(dirver)

支持无界面浏览器操作(自动交互)

1.2 安装chrome Driver

chrome deriver下载

需要注意 driver 与 chrom版本对应

1.3 selenium 使用

python 复制代码
# (1)导入selenium
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# (2) 创建浏览器操作对象
path = 'chromedriver.exe'
# 创建 Service 对象
service = Service(executable_path=path)
# 创建 WebDriver 对象
browser = webdriver.Chrome(service=service)

# (3)访问网站
url = 'https://www.jd.com/'
browser.get(url)
# page_source获取网页源码
content = browser.page_source
print(content)

1.4 selenium元素定位

selenium3和selenium4的语法有一定不同

button = browser.find_element(By.ID, 'chat-submit-button')

button2 = browser.find_elements(By.ID, 'chat-submit-button')
ID = "id"

XPATH = "xpath"

LINK_TEXT = "link text"

PARTIAL_LINK_TEXT = "partial link text"

NAME = "name"

TAG_NAME = "tag name"

CLASS_NAME = "class name"

CSS_SELECTOR = "css selector"

python 复制代码
button = browser.find_element(By.ID, 'chat-submit-button')

button2 = browser.find_element(By.NAME, 'wd')

button3 = browser.find_elements(By.TAG_NAME, 'input')

button4 = driver.find_element(By.CLASS_NAME, "btn-primary")

button5 = browser.find_element(By.LINK_TEXT, '直播')

button6 = browser.find_element(By.PARTIAL_LINK_TEXT, '直')

button7 = browser.find_elements(By.XPATH, '//button[@id="chat-submit-button"]')

button8 = browser.find_element(By.CSS_SELECTOR, '#chat-submit-button')

print(button)

1.5 访问元素信息

获取元素属性

.get_attribute('class')

获取元素文本

.text

获取标签名

.tag_name

python 复制代码
input = browser.find_element(By.ID, 'chat-textarea')
# 获取标签的属性
print(input.get_attribute('class'))
# 获取标签的名字
print(input.tag_name)
# 获取元素文本
a = browser.find_element(By.LINK_TEXT,'新闻')
print(a.text)

1.6 交互

点击:click()

输入:send_keys()

后退操作:browser.back()

前进操作:browser.forword()

模拟JS滚动:

js='document.documentElement.scrollTop=100000'

browser.execute_script(js) 执行js代码

获取网页代码:page_source

退出:browser.quit()

2. Phantomjs、Chrome handless

无界面浏览器。不进行css渲染,运行效率高。

Phantomjs基本被淘汰,建议使用Chrom handless

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

def share_browser():
    # 替换为你的 chromedriver 路径
    path = 'chromedriver.exe'  # Windows 示例,如 chromedriver.exe
    service = Service(executable_path=path)
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')  # 无头模式
    options.add_argument('--disable-gpu')
    options.add_argument('--no-sandbox')
    # 创建浏览器实例
    browser = webdriver.Chrome(service=service, options=options)
    return browser


browser = share_browser()

url = 'https://www.baidu.com'

browser.get(url)
browser.save_screenshot('baidu22.png')
相关推荐
X56614 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
ZhengEnCi5 小时前
03ab-PyTorch安装教程 📚
python
狐狐生风6 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
狐狐生风6 小时前
LangChain RAG 基础
人工智能·python·学习·langchain·rag·agentai
老前端的功夫6 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
yaoxin5211237 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai7 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw07 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
小白学大数据7 小时前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
深蓝电商API7 小时前
京东API批量操作优化:单次1000条限制的突破方案
爬虫·接口·api·京东api