使用Selenium和Python自动登录

时间:2019-02-05 22:21:27

标签: python python-3.x selenium google-chrome python-requests

我正在尝试使用Selenium登录打印机并进行一些测试。我确实对此过程没有太多经验,并且发现它有些令人困惑。

首先,要获取我可能想要的值,我在Chrome中打开了打印机网页,然后右键单击“查看页面源”-事实证明这没有帮助。从这里,我只能看到一堆<script>标记,它们调用了一些.js脚本。我认为这是我问题的很大一部分。

接下来,我右键单击后选择了“检查”选项。从这里,我可以看到实际加载的HTML。我登录该网站并在Chrome中记录了该过程。这样,我就可以识别出包含用户名和密码的变量。我去HTML的这一部分做了右键单击并复制了Xpath。然后,我尝试使用硒find_element_by_xpath,但还是没有运气。我尝试了所有其他方法(通过ID和名称查找),但是它返回一个错误,即找不到该元素。

我觉得这里有些根本不了解的事情。有人对此有任何经验吗?

注意:我正在使用Python 3.7和Selenium,但是如果有更优雅的方法可以完成此操作,我不反对尝试使用Selenium以外的其他方法。

我的代码如下所示:

编辑 这是我更新的代码-我可以确认这不仅仅是时间/等待问题。我已经成功地抓住了前两个外部要素,但第二个更深入地介绍了它的错误。

def sel_test():
    chromeOptions = Options()
    chromeOptions.add_experimental_option("useAutomationExtension", False)
    browser = webdriver.Chrome(chrome_options=chromeOptions)
    url = 'http://<ip address>/'
    browser.get(url)
    try:
        element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ccrx-root"]')))

    finally: browser.quit()

我想要的元素埋在这个标签中-也许这与它有关吗?可能与this post

有关
<frame name="wlmframe" src="../startwlm/Start_Wlm.htm?arg11=">

2 个答案:

答案 0 :(得分:0)

您的问题很可能是因为元素在您的机器人搜索之后才加载到页面上,或者是弹出窗口更改了元素的xpath。

尝试一下:

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

delay = 3 # seconds
try:
    elementUsername = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.xpath, 'element-xpath')))

    element.send_keys('your username')

except TimeoutException:
    print("Loading took too much time!")

您可以找到有关此here

的更多信息

答案 1 :(得分:0)

this post中所述,您只能使用显示的当前帧。您需要告诉硒切换帧以访问子帧。

例如: browser.switch_to.frame('wlmframe')

然后将加载嵌套内容,以便您可以访问子项