爬虫笔记17——selenium框架的使用

发布于:2024-07-03 ⋅ 阅读:(21) ⋅ 点赞:(0)

1、python程序安装selenium框架

# 在安装过程中最好限定框架版本为4.9.1
# pip install selenium 没有制定版本,非镜像下载也会比较慢
# 建议用下面这句命令
pip install selenium==4.9.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完selenium后,还需要安装使用selenium控制的浏览器需要的驱动。

2、下载Chrome谷歌驱动

需要下载Chrome浏览器版本对应的驱动,可以通过下面这个链接下载。
谷歌驱动下载地址:https://googlechromelabs.github.io/chrome-for-testing/#stable

驱动下载完成后要将文件移动到系统环境变量中:
● MacOS:将文件移动到/usr/local/bin目录
● Windows:将文件移动到python环境的安装目录下

或者自动义驱动路径:
直接复制下载的驱动.exe文件
在这里插入图片描述

然后粘贴到你程序的文件下,再进行指定即可使用了:
在这里插入图片描述

import time
from selenium import webdriver
from selenium.webdriver.chrome import service  #指导驱动路径

# 自定义指定驱动
service = service.Service(executable_path='./chromedriver.exe')

browser = webdriver.Chrome()

browser.get('https://www.baidu.com')

3、selenium的基本使用

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 获取要操作的浏览器对象
browser = webdriver.Chrome()
# browser = webdriver.Firefox()

# 自动加载指定的页面
browser.get('https://www.baidu.com')

# 获取指定的元素
input_text = browser.find_element(By.ID, 'kw')
# 在指定的元素上输入值
input_text.send_keys('Python')

button = browser.find_element(By.ID, 'su')
# 操作点击指定的标签
button.click()

# 查看加载网页的源代码
print(browser.page_source)

# 获取网页的cookies
print(browser.get_cookies())

# 查看经过处理之后,本页面最后显示的url,如果有重定向的话,那么就是302之后的url
print(browser.current_url)

# 打开新页面,但是会覆盖原来的标签页面
browser.get('https://www.bilibili.com')

# 要不覆盖打开新的标签页的话,可以执行js代码中的window.open('https://www.bilibili.com')
code_js = "window.open('https://www.jd.com')"
browser.execute_script(code_js)

# 在浏览器有多个标签页的情况下,可以进行切换标签页
browser.switch_to.window(browser.window_handles[0])

# 让当前的标签页退出
browser.close()

4、多个标签页切换顺序混乱的问题

window_handles列表保存了根据顺序打开的标签页句柄,但是在某些特殊的情况下标签页顺序和列表句柄元素顺序不一致,比如网络速度或页面响应速度的不同会导致实际打开页面的顺序和预期不同。所以在代码中不能完全依赖列表索引的方式完成页面切换。
解决方式如下:

import time
from selenium import webdriver

browser = webdriver.Chrome()
js_code = "window.open('https://www.baidu.com')"
browser.execute_script(js_code)
time.sleep(2)

js_code = "window.open('https://www.bilibili.com')"
browser.execute_script(js_code)
time.sleep(2)

js_code = "window.open('https://www.jd.com')"
browser.execute_script(js_code)
time.sleep(2)

browser.switch_to.window(browser.window_handles[0])

# 打印当前所有标签页的窗口句柄
print(browser.window_handles)

# 打印所有句柄对应的标签页名称
for handle in browser.window_handles:
    browser.switch_to.window(handle)
    print("页面标题: {},句柄: {}".format(browser.title,handle))

for handle in browser.window_handles:
    browser.switch_to.window(handle)
    # 通过页面标题或URL来定位
    if ("百度" in browser.title) or ("baidu.com" in browser.current_url):
        print("已切换到百度页面:", handle)
        time.sleep(2)
        browser.close()  # 关闭百度标签页
    elif ("哔哩" in browser.title) or ("bilibili.com" in browser.current_url):
        print("已切换到哔哩页面:", handle)
        time.sleep(2)
    else:
        print('已切换到京东页面:', handle)
        time.sleep(2)

print(browser.window_handles)
browser.quit()

以上就是selenium的基本使用了


网站公告

今日签到

点亮在社区的每一天
去签到