selenium基本使用
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题
可以直接用代码模拟真实的浏览器操作,每一步的点击 输入等
selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器
from selenium import webdriver,
import time
bro = webdriver.Chrome(executable_path='chromedriver_mac64')
# 开启谷歌浏览器控制
bro.get('https://www.douyin.com/')
# 用浏览器打开一个网页
print(bro.page_source)
# 获取到当前页面的所有内容 html格式 和 css
with open('1.html','w',encoding='utf-8')as f:
f.write(bro.page_source)
# 将获取到的页面数据 写入一个文件中 然后我们就可以使用bs4模块和request模块进行爬虫喽
time.sleep(2)
无界面浏览器
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
# 隐藏浏览器的图形化界面,但是数据还拿到
# chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
# chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
# chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片,
# chrome_options.add_argument('--headless')
chrome_options = Options()
chrome_options.add_argument('blink-settings=imagesEnabled=false')
# 生成一个无头浏览器 并且不加载图片 访问速度更快
bro = webdriver.Chrome(executable_path='chromedriver_mac64',chrome_options=chrome_options)
bro.get('https://www.douyin.com/')
# 用浏览器打开一个网页
print(bro.page_source)
# 获取到当前页面的所有内容 html格式 和 css
with open('1.html','w',encoding='utf-8')as f:
f.write(bro.page_source)
# 将获取到的页面数据 写入一个文件中
time.sleep(2)
代码操控网页抖音自动登录
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
# 隐藏浏览器的图形化界面,但是数据还拿到
from selenium.webdriver.common.by import By
chrome_options = Options()
# 生成一个无头浏览器 并且不加载图片 访问速度更快
bro = webdriver.Chrome(executable_path='chromedriver_mac64', chrome_options=chrome_options)
bro.get('https://www.douyin.com/')
# 用浏览器打开一个网页
bro.implicitly_wait(10)
btn = bro.find_element(by=By.CSS_SELECTOR, value='#_7hLtYmO > button')
btn.click()
# 获取到一个登录按钮,然后点击这个按钮
btn2 = bro.find_element(by=By.CSS_SELECTOR,
value="#web-login-container > article > article > article > div.web-login-common-wrapper__tab > ul.web-login-tab-list > li:nth-child(3)")
btn2.click()
# 获取到账号登录按钮 点击按钮
time.sleep(1)
phone = bro.find_element(by=By.CSS_SELECTOR,
value="#web-login-container > article > article > article > form > div.web-login-account-password__account-input-wrapper > div > input")
# 获取到输入框输入手机号
phone.send_keys('18338952552')
time.sleep(1)
password = bro.find_element(by=By.CSS_SELECTOR,
value="#web-login-container > article > article > article > form > div.web-login-account-password__password-input-wrapper > div > div > input")
password.send_keys('wujinbo123')
# 获取到密码框 输入密码
btn_login = bro.find_element(by=By.CSS_SELECTOR,
value="#web-login-container > article > article > article > form > div.web-login-account-password__button-wrapper > button")
btn_login.click()
# 获取到登录按钮,然后点击
time.sleep(5)
bro.find_element(by=By.支持的方法)
input_1=bro.find_element(by=By.ID,value='wd') # 按id找
input_1 = bro.find_element(by=By.NAME, value='wd') # name属性名
input_1=bro.find_element(by=By.TAG_NAME,value='input') # 可以按标签名字找
input_1=bro.find_element(by=By.CLASS_NAME,value='s_ipt') # 可以按类名
input_1=bro.find_element(by=By.LINK_TEXT,value='登录') # 可以按a标签内容找
input_1=bro.find_element(by=By.PARTIAL_LINK_TEXT,value='录') # 可以按a标签内容找
iinput_1 = bro.find_element(by=By.CSS_SELECTOR, value='#su') # 可
获取标签的属性值
print(res.get_attribute('src')) # 用的最多
res.text
#获取标签ID,位置,名称,大小(了解)
print(tag.id)
print(tag.location)
# 获取该标签的坐标
print(tag.tag_name)
print(tag.size)
btn = bro.find_element(by=By.CSS_SELECTOR, value='#_7hLtYmO > button')
res = btn.get_attribute('alt')
print(res)
# 获取到这个标签的alt属性的值
# 代码执行很快,有的标签没来的及加载,直接查找就会报错,设置等待
# 隐士等待:所有标签,只要去找,找不到就遵循 等10s的规则
bro.implicitly_wait(10)
# 显示等待:需要给每个标签绑定一个等待,麻烦
对于标签的一些操作
# 点击
tag.click()
# 输入内容
tag.send_keys()
# 清空内容
tag.clear()
# 浏览器对象 最大化
bro.maximize_window()
#浏览器对象 截全屏
bro.save_screenshot('main.png')
在网页上执行js代码
bro.execute_script('alert("美女")')
# 引号内部的相当于 用script标签包裹了
bro = webdriver.Chrome(executable_path='chromedriver_mac64', chrome_options=chrome_options)
bro.get('https://www.douyin.com/')
# 可以干的事
-获取当前访问的地址 window.location
-打开新的标签
-滑动屏幕--》bro.execute_script('scrollTo(0,document.documentElement.scrollHeight)')
-获取cookie,获取定义的全局变量
浏览器的操作
import time
from selenium import webdriver
browser=webdriver.Chrome(executable_path='chromedriver.exe')
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('http://www.sina.com.cn/')
browser.back()
time.sleep(2)
browser.forward()
browser.close()
异常处理
import time
from selenium import webdriver
browser=webdriver.Chrome(executable_path='chromedriver.exe')
try:
except Exception as e:
print(e)
finally:
browser.close()