标签(空格分隔): selenium python
geckodriver下载地址
chromedriver下载地址
将其解压后放到/usr/bin目录下 (如果报错就将其放到/bin/目录下面)
sudo tar -xzvf geckodriver-v0.20.0-linux64.tar.gz -C /usr/bin
cd /usr/bin
sudo chmod +x geckodriver
示例网站: https://www.baidu.com
from selenium import webdriver
driver = webdriver.Firefox() # Firefox
#driver = webdriver.Chrome() # Chrome
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
这里我们用selenium操控浏览器进行了输入字符以及点击操作
而找到浏览器上的元素的对应位置我用的是它自带的函数,其他常用定位函数如下
find_element_by_id("kw1")
find_element_by_name("wd")
find_element_by_tag_name("input")
find_element_by_class_name("input_wd")
find_element_by_css_selector("input[id=\"kw1\"]")
find_element_by_xpath("/html")
这些函数后面的传入的值分别是对应位置的id号,对应位置的name,其他同理,这个得看具体情况
特别注意的是by_class_name这个函数,有的网站会出现一个标签class名字之间有空格,它的意思是这个
class可以叫空格前面的名称,也可以叫空格后面的名称,你写的时候就写一个就行,不要一起复制下来
比如
你可以叫这个class为groom-module也可以叫home-card
示例网站: https://mail.qq.com/cgi-bin/loginpage
from selenium import webdriver
driver = webdriver.Firefox() # Firefox
#driver = webdriver.Chrome() # Chrome
driver.get('https://mail.qq.com')
driver.switch_to.frame('login_frame')
driver.find_element_by_id('u').send_keys('123123123')
driver.find_element_by_id('p').send_keys('121312132')
driver.find_element_by_id('login_button').click()
我们首先尝试直接去寻找元素的位置,发现报错,不能找到元素,这是因为登录框在框架里,
所以,我们要首先找到这个框架,然后再寻找元素的位置。
要的得到cookie很简单
登录之后
cookies = driver.get_cookies()
driver1 = webdriver.Firefox()
driver1.get('https://mail.qq.com')
for cookie in cookies:
driver1.add_cookie(cookie)
driver1.refresh() #你已经用cookie登录成功了
比如现在你想看一部漫画,可是你却不想动手去点,这时候就用得上了
直接上代码
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
js = 'document.documentElement.scrollTop=4000'
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.1kkk.com/ch16-257601/#ipg1')
#driver.implicitly_wait(5) #隐式等待
next_page = driver.find_element_by_id('cp_img')
driver.execute_script(js)
whether_end = driver.find_elemnet_by_xpath('//*[@id="last-mask"]')
while( 'block' in whether_end):
ActionChains(driver).click(next_page).perform()
time.sleep(3)
whether_end = driver.find_element_by_xpath('//*[@id="last-mask"]')
由于这网站本身的原因可能运行时会出点问题
ActionChains就是解决鼠标事件的类
下面是它的一些方法
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
而Keys是解决键盘事件的类
from selenium.webdriver.common.keys import Keys
下面是它的一些方法
send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
send_keys(Keys.SPACE) #空格键(Space)
send_keys(Keys.TAB) #制表键(Tab)
send_keys(Keys.ESCAPE) #回退键(Esc)
send_keys(Keys.ENTER) #回车键(Enter)
send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') #剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
send_keys(Keys.F1) #键盘F1
学完这些,基本的对浏览器的控制就差不多了,还有些内容没讲到,以后会补充