6.Cookie与滑块标签操作


cookie操作

# 查看cookie
cookie = driver.get_cookies()
print(cookie)

# 增加cookie
driver.add_cookie({'name':'xiaoming','key':'9988'})

# 清除所有cookie
driver.delete_all_cookies()

拖动滑块操作

# 拖动滑块到10000像素处(顶部w
js = "document.documentElement.scrollTop=10000"
driver.execute_script(js)

截图操作

保存为文件

# 对打开的页面进行截图,保存到当前文件夹,取名为abc.jpg
driver.get_screenshot_as_file("./abc.jpg")

base64保存

a = driver.get_screenshot_as_base64()
# 获取base64数据
print(a)
# 新建html文件,输入以下html代码即可


base64加载图片大小比正常大2-3倍,但是不用频繁请求服务器资源

# 指定位置的截图
pic = driver.find_element_by_xpath("//div[@class='lst']/a[3]")
pic.screenshot('./haha.png')

base64方法同上只是改成 data:image/png

浏览器操作

# 后退,刷新,前进
driver.back()
driver.refresh()
driver.forward()
# 最大化
driver.maximize_window()

超时操作系列

# 导入包
from selenium.webdriver.support.ui import WebDriverWait
from [selenium.webdriver.common.by](http://selenium.webdriver.common.by/) import By
from selenium.webdriver.support import expected_conditions as EC
# 如果10s页面还没加载出来,就抛出一个异常,需要配合try来做
driver.set_page_load_timeout(10)

# 隐性等待,全局查找页面元素的等待时间,如果这个时间没找到指定元素,就抛出异常,全局做一次就好
driver.implicitly_wait(20)

#显性等待,使用频率最高的元素超时设置
WebDriverWait(driver, 10,1).until(EC.presence_of_element_located([By.ID](http://by.id/), 'j-anime-nav'))
# 监控ID元素,值为'j-anime-nav',10s元素加载则继续,没有则报错,检测周期为1s,默认为0.5s
  • until用来检测指定的元素是否出现,如果在超时的时间内出现就返回选择器的信息,否则报TimeOutException
  • until_not用来检测指定的元素是否消失,如果在超时时间内消失返回True,否则报TimeOutException
# 如果20s内页面加载的title是这个,就返回true,不是就报错
a = WebDriverWait(driver, 20).until(EC.title_is('热血动画片/动画电影-热血动画搜索-4399动画片大全'))
print(a)

# 如果20s内页面加载的title是包含这个,就返回true,不是就报错
a = WebDriverWait(driver, 20).until(EC.title_contains(u'动画片'))

# 如果20s内class='lst'被加载出来就返回true并且继续执行,不是就报错
a = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME,'lst')))

# 如果20s内id='kw'的元素被可见(高宽都>0),那么就true继续执行,不是就报错
a = WebDriverWait(driver, 20).until(EC.visibility_of(driver.find_element([by=By.ID](http://by%3Dby.id/),value='kw')))

# 如果20s内匹配xpath语法中的文字是某个,就返回true并且继续执行,不是就报错
a = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element((By.XPATH,"//div[@class='lst']/a[3]/div/p"),u'吃鸡'))
#切到第1个标签
driver.switch_to.window(driver.window_handles[0])

#关闭当前切到的标签
driver.close()

注意这里的标签打开后位置保持一致,如ABC,即使此时标签页的打开呈现ACB,但switch后关闭标签页的还是按照ABC排列的数组进行关闭,即1A2B3C

# 增加user-agent
options.add_argument('user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1')

user-agent内层不加双引号,添加后可能会被CDN拦截

# 图片不加载
prefs = {
'profile.default_content_setting_values':{
'images':2
	}
}
options.add_experimental_option('prefs',prefs)

增加uer-agent和图片不加载都放在get之前

反selenium

# 某些网站会识别selenium,在driver前添加如下
options.add_experimental_option('excludeSwitches',['enable-automation'])

小知识

Cookie操作配合截获Cookie放在selenium进行免密码登陆(水军)

懒加载不拖滑块图片出不来,可以配合滑块拖动进行爬取

截图操作可以截取元素

刷新操作可以查看元素是否加载

显性等待查看元素是否被加载出来,如淘宝的抢购

标签用完就关闭,Chrome浏览器每个标签都是一个进程

User-Agent多找点,多User-Agent可以难以被识别,同时配合分辨率更加仿真

图片不加载可以让网页加载和爬取更快