ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5.模拟人类操作采集信息

2022-04-16 19:02:33  阅读:149  来源: 互联网

标签:xpath driver element 采集 iframe 人类 div find 模拟


拖拽操作

# 拖拽操作
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有