安装篇

设备: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")

 

 

 

示例