在爬取网页的过程中,经常会遇到一些弹窗的情况,有alert、confirm、prompt等三种,区别如下:
-
alert() 弹出个提示框 (确定)
警告消息框 alert 方法有一个参数,即希望对用户显示的文本字符串。该字符串不是 HTML 格式。该消息框提供了一个“确定”按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说,用户必须先关闭该消息框然后才能继续进行操作。
-
confirm() 弹出个确认框 (确定,取消)
确认消息框 使用确认消息框可向用户问一个“是-或-否”问题,并且用户可以选择单击“确定”按钮或者单击“取消”按钮。confirm 方法的返回值为 true 或 false。该消息框也是模式对话框:用户必须在响应该对话框(单击一个按钮)将其关闭后,才能进行下一步操作。
-
prompt() 弹出个输入框(确定,取消)
提示消息框 提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个“确定”按钮和一个“取消”按钮。如果您提供了一个辅助字符串参数,则提示消息框将在文本字段显示该辅助字符串作为默认响应。否则,默认文本为 “undefined”。
这三种弹窗的共同点是,弹出之后你是获取不到任何网页内容的,也就是无法通过常规的辦法
driver.find_element(by=By.XPATH,value='')
这种形式来获取元素。F12是没有任何内容,也无法点选的
selenium另外有一套方法来把driver转换到弹窗上:
driver.switch_to.alert.accept()
其中driver就是你设置好的浏览器句柄,switch_to.alert代表你当前的弹窗类型,alert就对应alert,accept的意思就是点确定,另外还有dismiss等用法,网上很多了,不详细说。
用这个语句,就可以把弹窗点掉,之后正常操作,但是我重点想说的是以下内容:
在实际网页中,往往弹窗会有一定延时,这时候你用这个语句就会报一个no such alert的错误,意味着获取不到弹窗,此时要用如下的办法解决:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
wait = WebDriverWait(driver, 10)
wait.until(EC.alert_is_present())
driver.switch_to.alert.accept()
引用Webdriver类,里面的参数第一个是句柄,第二个则是超时等待时间,这里是10秒钟。
Webdriver这种方法叫做显示等待,用一个默认频率不停的刷新(默认是0.5s),检测当前页面元素是否存在,如果超过10秒则抛出TimeOut。
很显然,这种方法比一般的sleep效率要高。
wait.until(EC.alert_is_present()) 就是判断弹窗是否存在,如果存在,那么就不会抛出异常,继续走下一步也就是获取到弹窗点击确定。
之后就可以进行正常的操作了。
在爬取网页的过程中,经常会遇到一些弹窗的情况,有alert、confirm、prompt等三种,区别如下:alert() 弹出个提示框 (确定)警告消息框 alert 方法有一个参数,即希望对用户显示的文本字符串。该字符串不是 HTML 格式。该消息框提供了一个“确定”按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说,用户必须先关闭该消息框然后才能继续进行操作。confirm() 弹出个确认框 (确定,取消)确认消息框 使用确认消息框可向用户问一个“是-或-否
因为是个普通的弹出提示信息,闪几秒就消失,没有输入框或者按钮,没有自己的句柄,它出现的时候页面还是可以操作的就这么个alert
我使用对alert的一些操作的不行的,driver.switch_to_alert().text 也是No such Alert……
我甚至...
第一次接触自动化用例的执行,出现并解决了下面几个小问题
这次的项目是ECSHOP(https://pan.baidu.com/s/1cDIhxEV-9stoJvorY1kVcA)提取码是1234,用的是python3.8,win10 64,后台mysql57,apache,wamp server。
1、no such alert
在执行关于评价商品的用例时,出现了不能正确获取屏幕弹窗的问题。
显示的message是no such alert,最开始使用了最简单的等待时间sleep
from time im
像下面截图中,是定位一个元素弹出框
直接使用 下面的一直都定位不到,元素的定位是正确的,但就是定位不到元素;
driver.findElement(By.xpath("/html/body//form/button[span[text()=‘提 交’]]")).click();
大概原因可能是,driver并没有在这个相应的对话框中查找元素,解决办法如下:
driver.getWindowHand...
Selenium::远程::驱动程序
是一个测试工具,允许您使用任何主流 JavaScript 浏览器针对任何 HTTP 网站以任何编程语言编写自动化 Web 应用程序 UI 测试。 该模块是的 Webdriver 客户端的 Perl 实现
该模块使用 HTTP 直接向服务器发送命令。 将此模块与 Selenium Server 一起使用,您可以自动控制任何受支持的浏览器。 要使用此模块,您需要已经下载并启动了 。
使用 cpanm 可能最简单:
$ cpanm Selenium::Remote::Driver
如果你想从这个存储库安装,你有几个选择:
使用 Dist::Zilla
如果你有 Dist::Zilla,它很简单:
$ dzil listdeps --missing | cpanm
$ dzil install
没有 Dist::Zilla
我们维护有Mak
driver.findElement(By by).click();
WebDriverWait wait = new WebDriverWait(driver, 5);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.accept();
在进行alert操作前,先判断是否有警报显示,即是否有弹框出来。
https://stackoverflow.com/questions/17749064/selenium-
如果要点击 "取消" 按钮, 可以使用 `driver.switch_to.alert.dismiss()`。
注意: 在执行这些操作之前, 需要等待 alert 弹窗出现, 否则会抛出 "No Alert Present" 异常。
### 回答2:
Python Selenium 可以使用 `webdriver` 中的 `switch_to.alert` 方法来处理网页上的 alert 弹窗。下面是一种常见的处理方法:
首先,使用 `driver.switch_to.alert` 方法来切换到 alert 弹窗:
```python
alert = driver.switch_to.alert
然后,可以使用以下方法来点击确定按钮:
```python
alert.accept()
将上述两行代码组合起来,可以在遇到 alert 弹窗时点击确定按钮:
```python
alert = driver.switch_to.alert
alert.accept()
完整的代码示例:
```python
from selenium import webdriver
# 创建一个浏览器实例
driver = webdriver.Chrome()
# 打开网页
driver.get("http://www.example.com")
# 切换到 alert 弹窗
alert = driver.switch_to.alert
# 点击确定按钮
alert.accept()
except:
# 没有弹窗时的处理逻辑
print("No alert found.")
# 关闭浏览器
driver.quit()
### 回答3:
使用Python的Selenium库来处理网页弹窗主要有两种情况:alert弹窗和确认框(confirm box)。回答中我们将重点讨论如何处理alert弹窗。
首先,我们需要使用`switch_to.alert`方法来定位到alert弹窗。然后,可以使用`accept()`方法来点击确定按钮,或者使用`dismiss()`方法来点击取消按钮。
以下是一个示例代码,演示了如何使用Python和Selenium来处理alert弹窗:
```python
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
# 创建一个WebDriver实例
driver = webdriver.Chrome()
# 打开网页
driver.get("https://example.com")
# 点击按钮,触发alert弹窗
button = driver.find_element_by_id("button_id")
button.click()
# 切换到alert弹窗
alert = Alert(driver)
# 点击确定按钮
alert.accept()
# 关闭浏览器
driver.quit()
在上面的示例中,我们首先使用WebDriver实例打开了一个网页。然后,找到页面上的某个按钮,并点击它以触发alert弹窗。接着,我们使用`Alert`类定位到alert弹窗,并用`accept()`方法点击确定按钮。最后,我们可以关闭浏览器。
需要注意的是,以上代码仅适用于处理alert弹窗,并不能用于处理其他类型的弹窗,例如确认框(confirm box)或输入框(prompt)。如果遇到其他类型的弹窗,可能需要使用不同的方法来完成。