selenium中按键操作、时间等待、点击事件、window切换基础操作介绍

selenium由网页驱动浏览器进行操作,速度慢是一大特点,经常会出现代码执行完毕,但是网页内容还没有加载完毕,里面的标签还没有显示出来,如果这个时候操作里面的标签就会抛出异常NoSuchElementExpection

解决的方法:时间休眠 time.sleep()(无论页面的内容有没有加载完毕,一定要休眠够指定的秒数)

一、按键操作

1.在按键操作之前一定要引入与之对应的包(我这里以百度为例)

2.find_element_by_xx 与find_elements_by_xx的区别 (加s的是查找多个,未加s是查找第一个。特别注意的是代码在运行过程有可能经常报错,不用灰心,可能不是代码的原因)

3.代码中的Firefox为火狐浏览器(这不是唯一选择,可根据自己个身的习惯进行选择。个人建议选择谷歌和火狐这两个浏览器。)

# common 共同的;公共的
# keys键
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
time.sleep(3)
# 找到输入框并输入内容
driver.find_element_by_id('kw').send_keys('selenium')
# ctrl+a全选输入框内的全部内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
time.sleep(3)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')
time.sleep(3)
driver.find_element_by_id('kw').send_keys(u'爬虫技巧')
time.sleep(3)
driver.find_element_by_id('su').click()
time.sleep(3)
# 退出浏览器
driver.quit()

二、时间等待

from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# driver.find_element_by_id('kw').send_keys('hello world')
button = driver.find_element_by_id('su')
# WebDriverWait网页等待
# 值1:等待的对象
# 值2:等待的时间
# WebDriverWait经常和until以及until not一起使用  until直到。。。
# lambda 匿名函数  is_displayed是否已经显示了
is_visible = WebDriverWait(driver,10).until(lambda driver:button.is_displayed())
print(is_visible)
button.click()
# WebDriverWait() 和 time.sleep()
# 1.都是让程序等待执行的时间
# 2.time的时间固定的,时间的长短不会随着标签的加载速度而改变
# WebDriverWait时间是不固定的,等待的时间要看标签的加载时间和指定的固定时间
# 3.如果在指定的时间内,标签仍然没有加载出来,那么time和WebDriverWait都会爆出异常

三、点击事件

1.该代码中的注释部分,并不是错误代码,而是我用不同的方法分别进行表示出来了。

2.其中double_click为双击  perform的意思为执行

3.所谓的鼠标移动并不是真的控制鼠标而是代码将光标移至某一位置

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
# action 行动  chains 链
from selenium.webdriver.support.ui import WebDriverWait
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# info = driver.find_element_by_tag_name('img')
info = driver.find_element_by_class_name('index-logo-src')
# info = driver.find_element_by_xpath('//div[@id="lg"]/img')
# info = driver.find_element_by_css_selector('#lg > img')
# contxt 上下文
# content 内容
# contxt_click 右击
WebDriverWait(driver,10).until(lambda driver:info.is_displayed())
# ActionChains(driver).double_click(info).perform()
action = ActionChains(driver).context_click(info)
action.perform()
# time.sleep(5)
# 鼠标移动
more = driver.find_element_by_class_name('bri')
WebDriverWait(driver,5).until(lambda driver : more.is_displayed())
ActionChains(driver).move_to_element(more).perform()

四、window切换

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 获取当前的window对象
current_window = driver.current_window_handle
# 获取当前窗口的编号和标题
# print(current_window,driver.title)

driver.find_element_by_name('tj_trnews').click()
# driver.find_element_by_link_text('新闻').click()

news = driver.find_element_by_css_selector('.hdline0 .a3').text
print(news)

info = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_css_selector('.hdline0 .a3'))
info.click()
# 获取所有的窗口
all_window = driver.window_handles
print(all_window)
for window in all_window:
    if window !=current_window :
        # switch 切换
        driver.switch_to.window(window)
time.sleep(5)
title = driver.find_element_by_css_selector('.text_title h1').text
print(title)
# 关闭浏览器
# driver.quit()
# 关闭窗口
time.sleep(5)
driver.close()
driver.switch_to.window(current_window)
print(driver.find_element_by_css_selector('#footer span').text)

未完待续、、、、、

猜你喜欢

转载自blog.csdn.net/qq_42543254/article/details/81321357
今日推荐