我正在尝试使用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=">
答案 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')
然后将加载嵌套内容,以便您可以访问子项