使用 Webdriver 自带的元素定位功能
1.id定位
browser.find_element_by_id(“loginName”) 定位id=loginName 的元素
2.name 定位
browser.find_element_by_name(“key_word”) 对name=key_word 的元素进行定位
3.通过 class 定位:可以使用 find_element_by_class_name() 数。
- 通过 tag 定位:使用 find_element_by_tag_name() 函数。
- 通过 link 上的完整文本定位:使用 find_element_by_link_text()函数。
- 通过 link 上的部分文本定位:使用find_element_by_partial_link_text() 函数。有时候超链接上的文本很长,我们通过查找部分文本内容就可以定位。
- 通过 XPath 定位:使用 find_element_by_xpath() 函数。使用XPath 定位的通用性比较好,因为当 id、name、class 为多个,或者元素没有这些属性值的时候,XPath 定位可以帮我们完成任务。
- 通过 CSS 定位:使用 find_element_by_css_selector() 函数。CSS 定位也是常用的定位方法,相比于 XPath 来说更简洁。
对元素进行操作
- 清空输入框的内容:使用 clear() 函数;
- 在输入框中输入内容:使用 send_keys(content) 函数传入要输入的文本;
- 点击按钮:使用 click() 函数,如果元素是个按钮或者链接的时候,可以点击操作;
- 提交表单:使用 submit() 函数,元素对象为一个表单的时候,可以提交表单;
模拟微博自动登录
from selenium import webdriver
import time
browser = webdriver.Chrome()
# 登录微博
def weibo_login(username, password):
# 打开微博登录页
browser.get('https://passport.weibo.cn/signin/login')
browser.implicitly_wait(5) #隐私等待,如果设定的时长里没有打开页面,就报错;否则向下执行
time.sleep(1)
# 填写登录信息:用户名、密码
browser.find_element_by_id("loginName").send_keys(username)
browser.find_element_by_id("loginPassword").send_keys(password)
time.sleep(1)
# 点击登录
browser.find_element_by_id("loginAction").click()
time.sleep(1)
# 设置用户名、密码
username = 'XXXX'
password = "XXXX"
weibo_login(username, password)
# 添加指定的用户
def add_follow(uid):
browser.get('https://weibo.com/u/'+str(uid))
time.sleep(10)
follow_button = browser.find_element_by_css_selector("a.W_btn_c.btn_34px")
follow_button.click()
time.sleep(3)
#执行函数
uid = '3290719501'
#add_follow(uid)
# 给指定某条微博写评论
def add_comment(weibo_url, content):
browser.get(weibo_url)
browser.implicitly_wait(5)
content_textarea = browser.find_element_by_css_selector("textarea.W_input").clear()
content_textarea = browser.find_element_by_css_selector("textarea.W_input").send_keys(content)
time.sleep(2)
comment_button = browser.find_element_by_css_selector(".W_btn_a").click()
time.sleep(1)
weibo_url = 'https://weibo.com/1890826225/HjjqSahwl'
content = 'Gook Luck! 好运已上路!'
add_comment(weibo_url,content)
# 发文字微博
def post_weibo(content):
# 跳转到用户的首页
browser.get('https://weibo.com')
browser.implicitly_wait(5)
content_textarea=browser.find_element_by_css_selector("textarea.W_input").send_keys(content)
time.sleep(2)
post_button = browser.find_element_by_css_selector("[node-type='submit']").click()
time.sleep(1)
# 自动发微博
content = '每天学点心理学'
post_weibo(content)
在具体运行函数的时候,多次遇到找不到元素的问题,参考https://www.cnblogs.com/yahutiaotiao/p/8044849.html ,在用css_selector的时候要注意,如果class_value中有空格,空格要用点代替而且要在前面加上tag名,如 follow_button = browser.find_element_by_css_selector("a.W_btn_c.btn_34px")。