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网页之后所有操作之前

原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/244584.html

(0)
上一篇 2022年4月17日
下一篇 2022年4月17日

相关推荐

发表回复

登录后才能评论