本文记录 Python
使用 Selenium
的一些操作,主要是为了方便以后查阅使用。对于一些网站的爬虫由于 js
脚本的加载使得爬虫的难度增大,因此可以考虑使用 Selenium
库来帮助我们,用它操纵浏览器来爬取需要的数据。
以下为本文涉及的需要加载的包。1
2
3
4
5
6
7
8
9
10
11import time
import re
import random
import pyautogui
from fake_useragent import UserAgent
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
# from lxml import etree, html
首先是使用一个随机的 userAgent
,其次是设定初始打开的链接地址。注意设置你的 webdrive
的地址。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import time
from fake_useragent import UserAgent
from selenium import webdriver
user_agent = UserAgent().random
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument(f'user-agent={user_agent}')
star_url = r"https://wenku.baidu.com/view/8844f45e15791711cc7931b765ce0508763275cf.html"
webdrive = r'D:/your/chromedriver.exe'
driver = webdriver.Chrome(webdrive, chrome_options=chromeOptions)
driver.get(star_url)
time.sleep(1)
# close the browser
# driver.close()
这里用的浏览器是 chrome
,可以看到成功打开了百度文库,但是目前什么操作都没做。
接下来可以做点简单的操作。
1 | # 获取网页的源码,可用于 lxml 的库的分析。但是 selenium 库其实也有选择器,挑选自己喜欢的方式即可 |
下面是在页面里面可输入交互的地方输入内容,并且点击.一下都是使用 xpath
进行元素定位.
1 | # 输入内容并且跳转 注意适当加入一些休息时间 |
如何新开一个 tag
并且关闭?可以参考如下的操作1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25import time
from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
star_url = r"https://camusecao.top/"
webdrive = r'D:/your/chromedriver.exe'
driver = webdriver.Chrome(webdrive, chrome_options=chromeOptions)
driver.get(star_url)
# 参考 https://stackoverflow.com/questions/28431765/open-web-in-new-tab-selenium-python 和 https://stackoverflow.com/questions/38154483/using-selenium-webdriver-in-python-to-open-link-in-new-tab-window https://stackoverflow.com/questions/25951968/open-and-close-new-tab-with-selenium-webdriver-in-os-x
time.sleep(5)
element = driver.find_element_by_xpath('//*[@id="sidebar"]/div/div[1]/div/div[4]/ul/li/a')
driver.execute_script('arguments[0].click();', element)
time.sleep(4)
# 聚焦到新开的 tab
driver.switch_to_window(driver.window_handles[1])
# 关闭这个 tab
driver.close()
# driver.execute_script("window.open('');")
# driver.switch_to.window(driver.window_handles[1])
# driver.get(url)
有些网页并不是一下子就加载全部的内容,可能要等到你滑动那里才加载。那么如果确保我们等待的时间不会过长呢?可以用 wait 的方法,检测到元素后再行动。比如等到某个元素加载好点击下一页.
1 | from selenium.webdriver.common.by import By |
下面是直接调用 chrome 来实现保存网页的方法。
1 | import os |