当前位置: 首页 > 面试题库 >

如何使Selenium / Python在继续运行之前等待用户登录?

庞鸿骞
2023-03-14
问题内容

我试图在Selenium /
Python中运行一个脚本,该脚本要求在其他位置登录才能运行其余脚本。有什么办法让我告诉脚本暂停并在登录屏幕上等待,以便用户手动输入用户名和密码(也许是等待页面标题更改的内容,然后继续执行脚本)。

到目前为止,这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import unittest, time, re, getpass

driver = webdriver.Firefox()
driver.get("https://www.facebook.com/")

someVariable = getpass.getpass("Press Enter after You are done logging in")

driver.find_element_by_xpath('//*[@id="profile_pic_welcome_688052538"]').click()

问题答案:

使用WebDriverWait。例如,这将执行google搜索,然后等待某个元素出现,然后再打印结果:

import contextlib
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as ui
with contextlib.closing(webdriver.Firefox()) as driver:
    driver.get('http://www.google.com')
    wait = ui.WebDriverWait(driver, 10) # timeout after 10 seconds
    inputElement = driver.find_element_by_name('q')
    inputElement.send_keys('python')
    inputElement.submit()
    results = wait.until(lambda driver: driver.find_elements_by_class_name('g'))
    for result in results:
        print(result.text)
        print('-'*80)

wait.until将返回lambda函数的结果,或者selenium.common.exceptions.TimeoutException如果lambda函数在10秒后继续返回Falsey值,则返回a。

您可以WebDriverWait在Selenium书中找到更多信息。



 类似资料:
  • 问题内容: 我正在尝试在Node.js / Express中创建一个路由,该路由从两个查询中读取数据,然后基于来自查询的数据来增加计数。由于Node.js是异步的,因此在读取所有数据之前会显示总计。 我创建了一个简单的示例,以达到我目前正在做的事情 我不确定要等到两个功能都完成后才能打印总计,我该做什么。我是否需要创建一个自定义事件发射器来实现这一目标? 问题答案: 拥抱异步性: 或使用Promi

  • 有一个创建XML文件的外部程序,但创建可能需要一段时间。我需要我的Java程序等到文件存在后再继续。 我读了一些关于同步块的书,我读到我可以做这样的事情: 老实说,我对同步任务知之甚少,所以我想知道我是否在正确的轨道上,或者我是否偏离了轨道。

  • 我有一个方法,可以为WebView的WebEngine设置一个新的网页,需要等到网页加载完成后才能继续使用当前方法。 基本上我想要: 我尝试过使用ChangeListener(),但它只会在我的方法完成执行后执行。我在谷歌上搜索了许多导致更多挫折感的术语,比如“java非阻塞等待布尔值”。最终,我成功地启动了新线程(以防止应用程序GUI锁定)并使用了倒计时(与Thread.join()相反)。下面

  • 问题内容: 我只是想知道,如何让浏览器在单击链接之前等待?我的目标是从动态网页抓取内容,内容是动态的,但我设法获取表单ID。唯一的问题是,提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在页面加载后立即开始单击链接(不是动态部分)。 有什么办法可以让我的浏览器等待2-3秒,直到出现提交按钮?我尝试使用它,但是它暂停了所有操作,提交按钮在显示期间没有出现,但是在2-3秒后显示。 问题答案

  • 我只是想知道,如何在点击链接之前让浏览器等待?我的目标是我从一个动态网页抓取,内容是动态的,但我设法得到表单ID。唯一的问题是提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在加载页面(不是动态部分)时立即开始单击链接。 有没有办法让我的浏览器等待2-3秒,直到提交按钮出现?我试图使用但它暂停了一切,提交按钮在期间没有出现,而是在结束时在2-3秒后出现。

  • 我必须使用axios提出请求,以便获取一些数据,这些数据应该作为道具传递给React组件。下面是我的渲染函数: FateChBoardList是一个异步函数,因此它将返回一个promise。我可以将然后和捕获处理程序附加到返回promise,但在这种情况下,我必须在两个处理程序中放入相同的超文本标记语言代码。还有别的办法吗?