极速冲上selenium的快车

引入包

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import warnings
warnings.filterwarnings('ignore')

获取页面信息

browser = webdriver.Chrome()
try:
    browser.get('https://www.baidu.com')
    minput = browser.find_element_by_id('kw')
    minput.send_keys('Python')
    minput.send_keys(Keys.ENTER)
    wait = WebDriverWait(browser, 10)
    wait.until(EC.presence_of_element_located((By.ID, 'content_left')))
    print(browser.current_url)
    print(browser.page_source)
finally:
    browser.close()
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Python&rsv_t=4494CH8jpjgbjlRZkunjhq6O3WHY2YTARmmPELAD%2BNkMJAof0O46OpN6iVs&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug2=0&inputT=196&rsv_sug4=196
...

获取节点信息

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
minput = browser.find_element_by_class_name("Tabs-link")
print(minput.id)
print(minput.location)
print(minput.tag_name)
print(minput.size)
print(minput.text)
print(minput.get_attribute('class'))
browser.close()
0.8341877833952027-1
{'x': 120, 'y': 1}
a
{'height': 50, 'width': 30}
首页
Tabs-link AppHeader-TabsLink

执行js

单页面操作实例

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
# 拉到最底
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("666")')
time.sleep(3)
# 打印alert具体内容
print(browser.switch_to.alert.text)
# 相当于点击确定键
browser.switch_to.alert.accept()
browser.close()
666

多页面操作实例

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
# 新开选项卡
browser.execute_script('window.open()')
print(browser.window_handles)
# 切换选项卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(3)
browser.switch_to_window(browser.window_handles[0])
browser.close()
['CDwindow-DD4B5FC447944E524A9E54AF1C02AA72', 'CDwindow-C8597E16C08D3C7385DDE880F11F7811']

延时等待

隐式等待

有点笨拙的一个方法,查找某个元素时,如果没找到,就先等待一下这么久再查找,如果再找不到就报错了。等待时间是固定的,因此很不灵活。

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
minput = browser.find_element_by_class_name("Tabs-link")
browser.close()

显式等待

这里的等待时间不再是固定等待时间,而是最长的等待时间,爬虫将一直尝试网页是否满足某个条件直到超出这个时间为止。在隐式等待中,满足条件只有元素出现这一种,而显式等待里的条件则更加丰富,比如可见、可以点击等等。

在这里插入图片描述

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.taobao.com')
wait = WebDriverWait(browser, 10)
# 等待到节点出现
minput = wait.until(EC.presence_of_element_located((By.ID, 'q')))
# 等待到节点可点击
mbutton = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(minput, mbutton)
browser.close()
<selenium.webdriver.remote.webelement.WebElement (session="3cd7ee1ba7451e815b4277a8b442e123", element="0.8261872481261998-1")> <selenium.webdriver.remote.webelement.WebElement (session="3cd7ee1ba7451e815b4277a8b442e123", element="0.8261872481261998-2")>

前进与后退

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
minput = browser.find_element_by_id('kw')
minput.send_keys('Python')
minput.send_keys(Keys.ENTER)
time.sleep(3)
# 返回首页
browser.back()
time.sleep(3)
# 回到搜索页
browser.forward()
time.sleep(3)
browser.close()

对Cookies进行操作

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
# 获取cookie
print(browser.get_cookies())
# 更新cookie
browser.add_cookie({'name':'user', 'value':'kkk'})
print(browser.get_cookies())
# 删除cookie
print(browser.delete_all_cookies())
print(browser.get_cookies())
[{'domain': '.baidu.com', 'expiry': 3734016002.137557, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1586532355'}, {'domain': '.baidu.com', 'expiry': 3734016002.137539, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14FA2C61D226D9583E3'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '30973_1458_31125_21126_30826_31186_31271_30823_31163'}, {'domain': '.baidu.com', 'expiry': 1618068355.137576, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14F56406BF9C9E3ABE8:FG=1'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}, {'domain': 'www.baidu.com', 'expiry': 1587396355, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}]
[{'domain': '.baidu.com', 'expiry': 3734016002.137557, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1586532355'}, {'domain': '.baidu.com', 'expiry': 3734016002.137539, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14FA2C61D226D9583E3'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '30973_1458_31125_21126_30826_31186_31271_30823_31163'}, {'domain': '.baidu.com', 'expiry': 1618068355.137576, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14F56406BF9C9E3ABE8:FG=1'}, {'domain': 'www.baidu.com', 'expiry': 2217252356, 'httpOnly': False, 'name': 'user', 'path': '/', 'secure': True, 'value': 'kkk'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}, {'domain': 'www.baidu.com', 'expiry': 1587396355, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}]
None
[]

使用代理

proxy = "http://123.163.27.237:9999"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server='+proxy)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('https://httpbin.org/get')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊城迷鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值