selenium的11种基础操作(元素的定位、操作,浏览器的打开、管理、处理、代理、加载,键盘操作)

selenium的11种基础操作(定位和操作元素,浏览器的打开、管理、处理、代理)

Selenium操作学习笔记

** 使用selenium自动化测试工具,模拟人为操作浏览器,达到可以注册/登录网页,滑动下拉框,选择,鼠标点击等操作。
学习背景: windows系统,python语言,PyCharm
学习资源: https://www.selenium.dev/documentation/en/

1. 定位元素

是最重要的学习内容之一,学习如何定位到网页中的元素

1.1 定位单一元素
driver.find_element(By.ID, "cheese")

tips:driver是WebDriver的实例对象

一旦通过ID定位到了cheese,可以在上一步结果的基础上进一步缩小范围

cheese = driver.find_element(By.ID, "cheese")
cheddar = cheese.find_elements_by_id("cheddar")

同时,也可以使用另一种方法实现

cheddar = driver.find_element_by_css_selector("#cheese #cheddar")
1.2 定位多个元素

网页结构如下

<ol id=cheese>
 <li id=cheddar><li id=brie><li id=rochefort><li id=camembert></ul>

定位cheese下的所有元素

mucho_cheese = driver.find_elements_by_css_selector("#cheese li")
1.3 元素选择策略

WebDriver有八个内置的元素选择方法

定位法使用描述
class name寻找包含查找值的class name元素(不包括复合class name)
css selector用css法定位元素
id依据id属性值定位元素
name依据name属性值定位元素
link text定位其可视文本与搜索值匹配的锚元素
partial link text定位其可视文本包含搜索值的第一个锚元素
tag name定位tag name与搜索值匹配的元素
xpath查找与xpaht表达式匹配的元素
1.4 其他定位法

在定位到想要的元素后,可以使用以下方法定位到相邻的元素

方法作用
above()定位到现元素上面的元素
below()定位到现元素下面的元素
toLeftOf()定位到现元素左面的元素
tpRightOf()定位到现元素右面的元素
near()定位到最多距现元素50个像素远的元素

2. 动作操作

2.1 定位并输入文本
name = "Charles"
driver.find_element(By.NAME, "name").send_keys(name) 
2.2 拖放功能
source = driver.find_element(By.ID, "source")
target = driver.find_element(By.ID, "target")
ActionChains(driver).drag_and_drop(source, target).perform()
2.3 点击元素
driver.find_element(By.CSS_SELECTOR, "input[type='submit']").click()

3. 实例化WebDriver

from selenium.webdriver import Chrome

driver = Chrome()

from selenium.webdriver import Chrome

with Chrome() as driver:
    #your code inside this indent

4. 浏览器操作

4.1 打开网页
driver.get("https://selenium.dev") 
4.2 获取当前网址

从浏览器的地址栏读取当前的URL

driver.current_url
4.3 按下浏览器的后退按钮
driver.back()
4.4 按下浏览器的前进按钮
driver.forward()
4.5 刷新当前网页
driver.refresh()
4.6 从浏览器中读取当前页面标题
driver.title
4.7 当打开一个新窗口时,获取该窗口的处理权
driver.current_window_handle
4.8 当点击一个链接跳转到新窗口时,需要switch到新窗口
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Start the driver
with webdriver.Chrome() as driver:
    # Open URL
    driver.get("https://seleniumhq.github.io")

    # Setup wait for later
    wait = WebDriverWait(driver, 10)

    # Store the ID of the original window
    original_window = driver.current_window_handle

    # Check we don't have other windows open already
    assert len(driver.window_handles) == 1

    # Click the link which opens in a new window
    driver.find_element(By.LINK_TEXT, "new window").click()

    # Wait for the new window or tab
    wait.until(EC.number_of_windows_to_be(2))

    # Loop through until we find a new window handle
    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            break

    # Wait for the new tab to finish loading content
    wait.until(EC.title_is("SeleniumHQ Browser Automation"))

4.9 创建新窗口并switch
# Opens a new tab and switches to new tab
driver.switch_to.new_window('tab')

# Opens a new window and switches to new window
driver.switch_to.new_window('window')
4.10 关闭一个窗口或tab
#Close the tab or window
driver.close()

#Switch back to the old tab or window
driver.switch_to.window(original_window)
4.11 退出浏览器
driver.quit()
4.12 Frames和Iframes,点击iframes中的按钮
<div id="modal">
  <iframe id="buttonframe" name="myframe"  src="https://seleniumhq.github.io">
   <button>Click here</button>
 </iframe>
</div>

方法一

# Store iframe web element
iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")

# switch to selected iframe
driver.switch_to.frame(iframe)

# Now click on button
driver.find_element(By.TAG_NAME, 'button').click()

方法二

# Switch frame by id
driver.switch_to.frame('buttonframe')

# Now, Click on the button
driver.find_element(By.TAG_NAME, 'button').click()  

方法三

# Switch to the second frame
driver.switch_to.frame(1)
4.13 退出一个frame或frameset
driver.switch_to.default_content()

5. 窗口管理

5.1 获取窗口大小
# Access each dimension individually
width = driver.get_window_size().get("width")
height = driver.get_window_size().get("height")

# Or store the dimensions and query them later
size = driver.get_window_size()
width1 = size.get("width")
height1 = size.get("height")  
5.2 设置窗口大小
driver.set_window_size(1024, 768)
5.3 获得窗口位置
# Access each dimension individually
x = driver.get_window_position().get('x')
y = driver.get_window_position().get('y')

# Or store the dimensions and query them later
position = driver.get_window_position()
x1 = position.get('x')
y1 = position.get('y')  
5.4 设置窗口位置
# Move the window to the top left of the primary monitor
driver.set_window_position(0, 0)
5.5 最大化窗口
driver.maximize_window()
5.6 最小化窗口
driver.minimize_window()
5.7 窗口全屏
driver.fullscreen_window()

6. 等待响应

本地html文件file:///race_condition.html

<!doctype html>
<meta charset=utf-8>
<title>Race Condition Example</title>

<script>
  var initialised = false;
  window.addEventListener("load", function() {
    var newElement = document.createElement("p");
    newElement.textContent = "Hello from JavaScript!";
    document.body.appendChild(newElement);
    initialised = true;
  });
</script>
6.1 显式等待网页加载完成

方法一

from selenium.webdriver.support.ui import WebDriverWait
def document_initialised(driver):
    return driver.execute_script("return initialised")

driver.navigate("file:///race_condition.html")
WebDriverWait(driver).until(document_initialised)
el = driver.find_element(By.TAG_NAME, "p")
assert el.text == "Hello from JavaScript!"

方法二

from selenium.webdriver.support.ui import WebDriverWait

driver.navigate("file:///race_condition.html")
el = WebDriverWait(driver).until(lambda d: d.find_element_by_tag_name("p"))
assert el.text == "Hello from JavaScript!"  

方法三

WebDriverWait(driver, timeout=3).until(some_condition) 
6.2 隐式等待
driver = Chrome()
driver.implicitly_wait(10)
driver.get("http://somedomain/url_that_delays_loading")
my_dynamic_element = driver.find_element(By.ID, "myDynamicElement")
6.3 流式等待
driver = Chrome()
driver.get("http://somedomain/url_that_delays_loading")
wait = WebDriverWait(driver, 10, poll_frequency=1, ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException])
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//div")))  

7. JavaScript警报、提示和确认

7.1 处理警报
# Click the link to activate the alert
driver.find_element(By.LINK_TEXT, "See an example alert").click()

# Wait for the alert to be displayed and store it in a variable
alert = wait.until(expected_conditions.alert_is_present())

# Store the alert text in a variable
text = alert.text

# Press the OK button
alert.accept()  
7.2 处理确认
# Click the link to activate the alert
driver.find_element(By.LINK_TEXT, "See a sample confirm").click()

# Wait for the alert to be displayed
wait.until(expected_conditions.alert_is_present())

# Store the alert in a variable for reuse
alert = driver.switch_to.alert

# Store the alert text in a variable
text = alert.text

# Press the Cancel button
alert.dismiss()  
7.3 处理提示
# Click the link to activate the alert
driver.find_element(By.LINK_TEXT, "See a sample prompt").click()

# Wait for the alert to be displayed
wait.until(expected_conditions.alert_is_present())

# Store the alert in a variable for reuse
alert = Alert(driver)

# Type your message
alert.send_keys("Selenium")

# Press the OK button
alert.accept()  

8. Http代理

from selenium import webdriver

PROXY = "<HOST:PORT>"
webdriver.DesiredCapabilities.CHROME['proxy'] = {
    "httpProxy": PROXY,
    "ftpProxy": PROXY,
    "sslProxy": PROXY,
    "proxyType": "MANUAL",
}

with webdriver.Chrome() as driver:
    # Open URL
    driver.get("https://selenium.dev")  

9. 网页加载策略

9.1 normal(网页完全加载)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
# Navigate to url
driver.get("http://www.google.com")
driver.quit()  
9.2 eager(只加载主页面,忽略表格、图像和子框架)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
# Navigate to url
driver.get("http://www.google.com")
driver.quit()  
9.3 none(仅加载主页面)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
# Navigate to url
driver.get("http://www.google.com")
driver.quit()  

10. Web元素

10.1 查找元素
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("http://www.google.com")

# Get search box element from webElement 'q' using Find Element
search_box = driver.find_element(By.NAME, "q")

search_box.send_keys("webdriver")  
10.2 查找多元素
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

# Navigate to Url
driver.get("https://www.example.com")

# Get all the elements available with tag name 'p'
elements = driver.find_elements(By.TAG_NAME, 'p')

for e in elements:
    print e.text  
10.3 从元素下查找单个元素
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://www.google.com")
search_form = driver.find_element(By.TAG_NAME, "form")
search_box = search_form.find_element(By.NAME, "q")
search_box.send_keys("webdriver")  
10.4 从元素下查找多个元素
  from selenium import webdriver
  from selenium.webdriver.common.by import By

  driver = webdriver.Chrome()
  driver.get("https://www.example.com")

  # Get element with tag name 'div'
  element = driver.find_element(By.TAG_NAME, 'div')

  # Get all the elements available with tag name 'p'
  elements = element.find_elements(By.TAG_NAME, 'p')
  for e in elements:
      print e.text  
10.5 获取当前锚定元素
  from selenium import webdriver
  from selenium.webdriver.common.by import By

  driver = webdriver.Chrome()
  driver.get("https://www.google.com")
  driver.find_element(By.CSS_SELECTOR, '[name="q"]').send_keys("webElement")

  # Get attribute of current active element
  attr = driver.switch_to.active_element.get_attribute("title")
  print attr  

11. 键盘操作

11.1 sendKeys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()

# Navigate to url

driver.get("http://www.google.com")

# Enter "webdriver" text and perform "ENTER" keyboard action

driver.find_element(By.NAME, "q").send_keys("webdriver" + Keys.ENTER)  
11.2 keyDown
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()

# Navigate to url

driver.get("http://www.google.com")

# Enter "webdriver" text and perform "ENTER" keyboard action

driver.find_element(By.NAME, "q").send_keys("webdriver" + Keys.ENTER)

# Perform action ctrl + A (modifier CONTROL + Alphabet A) to select the page

webdriver.ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").perform()  
11.3 keyUp
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()

# Navigate to url

driver.get("http://www.google.com")

# Store google search box WebElement

search = driver.find_element(By.NAME, "q")

action = webdriver.ActionChains(driver)

# Enters text "qwerty" with keyDown SHIFT key and after keyUp SHIFT key (QWERTYqwerty)

action.key_down(Keys.SHIFT).send_keys_to_element(search, "qwerty").key_up(Keys.SHIFT).send_keys("qwerty").perform()  
11.4 clear
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()

# Navigate to url

driver.get("http://www.google.com")
# Store 'SearchInput' element

SearchInput = driver.find_element(By.NAME, "q")
SearchInput.send_keys("selenium")
# Clears the entered text

SearchInput.clear()  
  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要使用Selenium获取当前网址,可以使用`driver.current_url`方法。这个方法会返回当前页面的URL。以下是一个使用Selenium获取当前网址的示例代码: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.example.com') current_url = driver.current_url print('当前网址为:{0}'.format(current_url)) driver.quit() ``` 在这个示例中,我们首先创建了一个Chrome浏览器的实例。然后,我们使用`driver.get()`方法打开了一个网页。接下来,我们使用`driver.current_url`方法获取当前页面的URL,并将其打印出来。最后,我们使用`driver.quit()`方法关闭浏览器。 请注意,你需要根据你使用的浏览器和驱动程序进行相应的设置和安装。在这个示例中,我们使用了Chrome浏览器和Chrome驱动程序。 #### 引用[.reference_title] - *1* [Selenium自动化之获取当前页面的url操作](https://blog.csdn.net/DansonC/article/details/98836437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [selenium获取访问页面url](https://blog.csdn.net/wsx014/article/details/125366409)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值