selenium 简单操作

1、安装 selenium

        在终端上安装

pip install selenium

2、导包

from selenium import webdriver

3、 连接已打开的网页

注意:手动启动Chrome浏览器并指定一个调试端口

   3.1  打开调试端口
Windows:
  1. 首先,找到你的Chrome的安装路径。通常情况下,它可能在以下路径:

C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

        或者:

C:\Program Files\Google\Chrome\Application\chrome.exe

     2. 打开一个命令提示符窗口。这可以通过按下 Windows + R 键,输入 cmd 并点击确定来完成。

     3.  在命令提示符窗口中,键入以下命令(请确保更改路径为你的Chrome安装路径):

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222

       然后按Enter键。

这将会启动一个新的Chrome实例,并监听9222端口进行远程调试。

macOS:

     1.打开一个终端窗口。

      2.输入以下命令并按Enter键

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

      3.这将同样启动一个新的Chrome实例,监听9222端口进行远程调试。

这将同样启动一个新的Chrome实例,监听9222端口进行远程调试。

注:可以在地址栏输入:chrome://version/  判断是否打开调试端口

3.2示例:
  1. 你的ChromeDriver版本与Chrome浏览器版本兼容。
  2. webdriver.Chrome的路径是正确的(如果它不在你的PATH中)。
  3. 百度已经打开在浏览器的当前选项卡中。

以下是一个简单的连接已打开的网页示例:

        对已打开的百度网页进行搜索 ‘狗’的操作

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

# 连接到已打开的Chrome浏览器实例
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)

# 假设你已经打开了百度,这里直接查找搜索框并输入"狗"
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("狗")
search_box.send_keys(Keys.RETURN)

# 注意: 在完成所有操作后,你可能会想关闭driver连接,但不关闭浏览器
# driver.quit()

4、 打开网页进行操作

简单示例:

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# 创建一个新的Chrome浏览器窗口
driver = webdriver.Chrome()

# 导航到baidu
driver.get("https://www.baidu.com")

# 找到搜索框元素并输入“狗”
search_box = driver.find_element(By.NAME, "wd")
search_box.send_keys("狗")
search_box.send_keys(Keys.RETURN)

# 等待页面加载完成
# driver.implicitly_wait(10)
# 等待十秒
time.sleep(10)
# 关闭浏览器窗口
driver.quit()

5、常见定位不到问题

selenium.common.exceptions.NoSuchElementException

  1. 页面尚未完全加载该元素。
  2. 给定的XPath是错误的或过于特定,不能匹配任何元素。
  3. 页面的结构已经改变,因此给定的XPath不再有效。

解决方案:

1. 增加等待

确保在查找元素之前,页面已经完全加载了该元素。为此,你可以使用Selenium的显式等待功能:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get('your_webpage_url')
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '/html/body/div[2]/table[1]/tbody/tr/td[3]/font'))
    )
except:
    print("无法找到指定的元素")

上述代码将等待最多10秒,直到找到指定的元素为止。

2. 重新检查XPath

确认你的XPath是正确的。使用浏览器的开发者工具来测试和验证XPath。要记住,过于具体的XPath可能会在页面结构稍有变化时立即失效。尝试使用更一般的、但仍然能定位到目标元素的XPath。

3. 使用其他定位策略

如果可能的话,考虑使用其他定位策略,如ID、class、CSS选择器等。XPath是强大的,但也可能很脆弱,尤其是当它很具体时。

4. 确保元素确实存在

确保你正在尝试访问的元素确实存在于页面上。也许你访问的是一个不同的版本或页面状态,导致元素不存在。

5. 检查是否有iframe

如果页面上有iframe,确保你已经切换到了正确的iframe中。如果元素位于iframe内,你需要先切换到该iframe,然后再尝试查找元素。

综上所述,你需要检查和调整你的代码,确保你的自动化脚本可以正常工作。

关于第五点操作:

如果一个元素位于iframeframe内,你必须首先切换到那个iframeframe中,然后才能与该元素交互。这可以使用Selenium的switch_to.frame()方法完成。

通过索引切换: 如果你知道iframe在页面上的位置,你可以通过索引来切换。

driver.switch_to.frame(0)  # 第一个iframe

通过名称或ID切换: 如果iframenameid属性,你可以使用这些属性切换。

driver.switch_to.frame("iframeName")
driver.switch_to.frame("iframeID")

通过元素对象切换: 你还可以首先获取到iframe的元素对象,然后使用该对象来切换。

iframe_element = driver.find_element(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframe_element)

一旦你完成了iframe内的操作,你可能需要切回主文档。为此,你可以使用以下命令:

driver.switch_to.default_content()

注意: 如果页面中有多个嵌套的iframe,你需要逐个切换,从外层开始,然后逐步进入每一个内层的iframe

 以下是一个简单的例子,假设有一个外层iframe和一个内层iframe:

# 切换到外层iframe
driver.switch_to.frame("outerIframeID")

# 切换到内层iframe
driver.switch_to.frame("innerIframeID")

# 在内层iframe中进行操作...
# ...

# 切换回外层iframe
driver.switch_to.parent_frame()

# 或切换回主文档
driver.switch_to.default_content()

当处理iframe时,始终确保你已经切换到了正确的iframe,然后再尝试查找和交互其中的元素。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值