安装篇
设备:MAC
phantomjs:https://phantomjs.org/download.html
安装selenium
pip install selenium
安装 chromedriver
首先确认下载的是 与chrome版本相对应 的chromedriver https://chromedriver.storage.googleapis.com/index.html
把chromedriver.exe文件放入/usr/local/bin下
在Finder中用快捷键cammand+shift+G,输入/usr/local/bin 或者在terminal中输入 open /usr/local/bin 通过命令拷贝
将chromedriver.exe文件放入/usr/local/bin下
启动篇
示例代码
import time from selenium import webdriver from selenium.webdriver.common.by import By if __name__ == "__main__": driver = webdriver.Chrome() driver.implicitly_wait(10) # 打开百度首页 driver.get("https://www.baidu.com") # 点击 新闻 ,新标签页打开百度新闻 driver.find_element(By.LINK_TEXT, "新闻").click() # 在百度首页点击 视频,打开百度视频 driver.find_element(By.LINK_TEXT, "视频").click() time.sleep(2) # 关闭百度首页这个标签页 driver.close() time.sleep(2) # 关闭浏览器 driver.quit()
遇到问题:
无法打开“chromedriver”,因为无法验证开发者,如有其他问题可参考 https://blog.csdn.net/m0_59868866/article/details/130130126
解法:
因为刚下载的chromedriver 非商店下载,触发MAC安全机制,执行以下命令,找到对应的 driver 文件的存储路径,修改安全属性:
cd /usr/local/bin xattr -d com.apple.quarantine chromedriver
使用篇
执行以上代码后会调起一个浏览器自动执行以上操作。
alert
alert()方法用于显示带有一条指定消息和一个 确认 按钮的警告框。
示例
driver.get("https://www.runoob.com/try/try.php?filename=tryjs_alert") driver.switch_to.frame("iframeResult") driver.find_element(By.XPATH, '//*[@value="显示警告框"]').click() # 切换到 alert 弹框内 alert = driver.switch_to.alert alert.accept() # 点击确定 # 退出弹框界面 driver.switch_to.default_content() assert driver.find_element(By.ID, "submitBTN").text == "点击运行 》"
confirm
confirm()方法用于显示一个带有指定消息和确认及取消按钮的对话框。
如果访问者点击"确定",此方法返回 true,否则返回 false。
示例
driver.get("https://www.runoob.com/try/try.php?filename=tryjs_confirm") driver.switch_to.frame("iframeResult") # 切换到 alert 弹框内,点击「确定」,断言文案 driver.find_element(By.XPATH, "//body/button").click() # 点我 alert = driver.switch_to.alert alert.accept() # 点击确定 assert driver.find_element(By.ID, "demo").text == '你按下了"确定"按钮!' # 切换到 alert 弹框内,点击「取消」,断言文案 driver.find_element(By.XPATH, "//body/button").click() # 点我 alert = driver.switch_to.alert alert.dismiss() # 点击取消 assert driver.find_element(By.ID, "demo").text == '你按下了"取消"按钮!'
prompt
prompt()方法用于显示可提示用户进行输入的对话框。
这个方法返回用户输入的字符串。
支持用户在弹框内输入文本,用于后续处理。
示例
driver.get("https://www.runoob.com/try/try.php?filename=tryjs_prompt") # 1. 切换到 iframe 内,点击按钮,弹出弹窗 self.driver.switch_to.frame("iframeResult") self.driver.find_element(By.XPATH, "//body/button").click() # 2. 弹窗内点击取消,验证获取文本为空,文本展示元素不存在 alert = self.driver.switch_to.alert alert.dismiss() assert self.driver.find_element(By.ID, "demo").is_selected() is False # 3. 弹窗内输入文本点击确定,验证文本展示与输入一致 self.driver.find_element(By.XPATH, "//body/button").click() alert = self.driver.switch_to.alert assert alert.text == "请输入你的名字" alert.send_keys("father") alert.accept() assert "father" in self.driver.find_element(By.ID, "demo").text
进阶篇
element
变量说明:
1.element.size:获取元素的尺寸。
2.element.text:获取元素的文本。
3.element.tag_name:获取标签名称。
相关方法:
1.element.clear():清除文本。
2.element.send_keys(value):输入文字或键盘按键(需导入Keys模块)。
3.element.click():单击元素。
4.element.get_attribute(name):获得属性值
5.element.is_displayed():返回元素结果是否可见(True 或 False)
6.element.is_selected():返回元素结果是否被选中(True 或 False)
7.element.is_enabled():返回元素是否可操作(True 或 False)
8.element.find_element*():定位元素,用于二次定位。
# 元素属性定位(3种) driver.find_element_by_id(‘id’) driver.find_element_by_name('name') driver.find_element_by_class_name('class_name') # 超链接定位(2种) driver.find_element_by_link_text('link_text') driver.find_element_by_partial_link_text('partial_link_text') # 元素标签,元素路径,CSS选择器 driver.find_element_by_tag_name('tag_name') driver.find_element_by_xpath('xpath') driver.find_element_by_css_selector('css_selector')
滚动
# 向下滚动xx个像素 driver.execute_script('window.scrollBy(0,xx)') # 向上滚动x个像素 driver.execute_script('window.scrollBy(0,-xx)') # 向右滚动x个像素 driver.execute_script('window.scrollBy(xx,0)') # 向左滚动x个像素 driver.execute_script('window.scrollBy(-x,0)') # 滚动至元素可见 dz=driver.execute_script("arguments[0].scrollIntoView();",要滚动元素的位置) # 代码如下 duizhao=driver.find_element(AppiumBy.XPATH,'//*[sstatarts-with(text(),"下一页:")]') dz=driver.execute_script("arguments[0].scrollIntoView();",duizhao)
获取页面源码
示例
# 执行js得到整个HTML html = driver.execute_script("return document.documentElement.outerHTML") 获得整个文档的HTML html = driver.find_element_by_xpath("//*").get_attribute("outerHTML") # 不要用 driver.page_source,那样得到的页面源码不标准 获取单个元素具体的HTML源文件 webElement.getAttribute("outerHTML")