5.模拟人类操作采集信息
作者:互联网
拖拽操作
# 拖拽操作
first_target = driver.find_element_by_xpath("//span[contains(text(),'喜羊羊与灰太狼之决战次时代')]")
second_target = driver.find_element_by_xpath("//a[contains(text(),'动画')]")
action = ActionChains(driver)
action.drag_and_drop(first_target,second_target).perform()
拖拽操作需要使用xpath或者其他方法找到起始位置和终点位置,多数用在手机,电脑能用但不好使
鼠标点击像素操作
# 把鼠标移动到某个特定的地方,然后点击执行
ActionChains(driver).move_by_offset(200,300).click().perform()
# 记得把鼠标移动回来
ActionChains(driver).move_by_offset(-200,-300).perform()
鼠标其他操作
click() 点击鼠标左键
click_and_hold() 点住鼠标左键不放
context_click() 点击鼠标右键
double_click() 双击鼠标左键
drag_and_drop_by_offset(first_tar,100,100) 拖拽到某个坐标然后松开
key_down("a") 按下一个键
key_up("a") 抬起一个键
move_to_element(ele) 移动到某个元素的位置
move_to_element_with_offset(ele,100,0) 移动到相对ele元素的位置(以找到元素位置的左上角作为(0,0))
下拉框且是select标签
from selenium.webdriver.support.ui import Select
# 使用select包裹起来xpath查找到的select元素
select1 = Select(driver.find_element_by_xpath("//select[@class='year']"))
# 选择值是1999的
select1.select_by_value("1999")
新建标签页
js = 'window.open("[http://www.baidu.com](http://www.baidu.com/)")'
driver.execute_script(js)
相当于在selenium里面执行JavaScript代码,此时打开新标签,机器的视角还是在原来的网页里
切换标签页
#切换标签页
driver.switch_to.window(driver.window_handles[1])
#切换回原来的
driver.switch_to.window(driver.window_handles[0])
新的选项卡相当于1,旧的相当于0,类比数组
# 看到当前有多少个窗口和句柄(唯一标识符)
print(driver.window_handles)
handle在C++表示窗体控制
关于iframe(嵌套页面)的处理
iframe表示页面嵌套,呈现的结果就是iframe里面有一个小的目标页面,原有的xpath爬取方式失效,需要先处理iframe
单个iframe
**方法1:**
driver.get("http://192.168.223.141/hello.html")
# 寻找到iframe的位置
find_div = driver.find_element_by_css_selector("#waimian>iframe")
#让driver切换到iframe所代表的网页中
driver.switch_to.frame(find_div)
**方法2:**
find_div = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(find_div)
出现多个iframe
find_div = driver.find_elements_by_tag_name("iframe")
#让driver切换到第2个iframe中
driver.switch_to.frame(find_div[1])
#释放iframe,回到主页面上
driver.switch_to.default_content()
#让driver切换到第1个iframe中
driver.switch_to.frame(find_div[0])
获取标签下的文字
result = driver.find_elements_by_xpath("//div[@class='u-ct']")
for i in range(len(result)):
title = result[i].find_element_by_xpath("./p[@class='u-tt']").get_attribute("innerText")
print(title)
处理弹窗
弹窗在JavaScript中最先执行,如果不点接受则一直显示弹窗而没有内容出现
# 任何弹窗都接受
driver.switch_to.alert.accept()
处理弹窗需要放在get网页之后所有操作之前
标签:xpath,driver,element,采集,iframe,人类,div,find,模拟 来源: https://www.cnblogs.com/icui4cu/p/16153850.html