爬虫selenium模块

发布时间 2023-03-22 21:11:19作者: Python-moon

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()

appnium可以操控手机