选择元素
find_element_by_id:通过元素的id选择,例如:driver.find_element_by_id(‘loginForm’)
find_element_by_name:通过元素的name选择,driver.find_element_by_name(‘password’)
find_element_by_xpath:通过xpath选择,driver.find_element_by_xpath(“//form[1]”)
find_element_by_link_text:通过链接地址选择
find_element_by_partial_link_text:通过链接的部分地址选择
find_element_by_tag_name:通过元素的名称选择
find_element_by_class_name:通过元素的id选择
find_element_by_css_selector:通过css选择器选择
需要多个元素就加上s 变成find_elements
推荐 xpath和css_selector
自动操作网页
– clear 清除元素的内容
– send_keys 模拟按键输入
– click 点击元素
– submit 提交表单
自动登录
user = driver.find_element_by_name("username") #找到用户名输入框
user.clear #清除用户名输入框内容
user.send_keys("1234567") #在框中输入用户名
pwd = driver.find_element_by_name("password") #找到密码输入框
pwd.clear #清除密码输入框内容
pwd.send_keys("******") #在框中输入密码
driver.find_element_by_id("loginBtn").click() #点击登录
还可以 双击,拖拽等操作。此外,它还可以获得网页中各个元素的大小,甚至还可以进行模拟键盘的操作。selenium的官方文档查看:http://selenium-python.readthedocs.io/index.html
现在css加载
设置属性firefox_profile
fp = webdriver.FirefoxProfile()
fp.set_preference("permissions.default.stylesheet",2)
driver = webdriver.Firefox(firefox_binary=binary, firefox_profile=fp, capabilities=caps)
运行可以看到网页的样式没了
限制图片加载
加一个图片限制属性
fp.set_preference("permissions.default.image",2)
禁止JavaScript
fp.set_preference("javascript.enabled", False)
完整代码
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
import time
caps = webdriver.DesiredCapabilities().FIREFOX
caps["marionette"] = True
binary = FirefoxBinary(r'D:\Program Files\Mozilla Firefox\firefox.exe') # 火狐浏览器地址
# 属性
fp = webdriver.FirefoxProfile()
fp.set_preference("permissions.default.stylesheet", 2) # 限制css
fp.set_preference("permissions.default.image", 2) # 限制图片
fp.set_preference("javascript.enabled", False) # 禁止js
driver = webdriver.Firefox(firefox_binary=binary, firefox_profile=fp, capabilities=caps)
driver.get("http://www.santostang.com/2018/07/04/hello-world/") # 打开网页
time.sleep(3) # 等一下 等页面加载好
# 找到元素
driver.switch_to.frame(driver.find_element_by_css_selector("iframe[title='livere']"))
comments = driver.find_elements_by_css_selector('div.reply-content')
for eachcomment in comments:
content = eachcomment.find_element_by_tag_name('p')
print (content.text)