我试图用Selenium登录到一台打印机,并进行一些测试。我真的没有在这个过程中很多经验和发现它有点混乱。
首先,让我可以一直想我在Chrome中打开打印机的网页,并做了右键点击“查看页面源代码”的价值观 - 这竟然是没有帮助的。在这里,我只能看到一堆调用一些.js文件的脚本<script>
标签。我假定这是我的问题的一个重要组成部分。
接下来,我选择右击后的“检查”选项。从这里我可以看到加载的实际HTML。我登录到网站,并记录在Chrome的过程。有了这个,我是能够识别包含用户名和密码的变量。我去了HTML的这一部分做了正确的点击复制Xpath的。然后,我尝试使用硒find_element_by_xpath
但仍没有运气。我已经尝试了所有其他方法(由ID找到,并将其命名),但是它返回的元素没有发现错误。
我觉得有东西在这里根本,我不理解。有人对这个有经验么???
注:我使用Python 3.7和硒,但我不反对尝试比硒等东西,如果没有做到这一点更优雅的方式。
我的代码看起来是这样的:
编辑这里是我更新的代码 - 我可以证实这不只是一个时间/等待问题。我已经设法成功地抢得头两个外部因素,但第二个我去深入它的错误了。
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=">
正如this post提到你只能用这被视为当前帧的工作。你需要告诉硒来切换图像,以便访问子框架。
例如:browser.switch_to.frame('wlmframe')
那么这将加载嵌套内容,以便您可以访问孩子
你的问题是最有可能做的或者不加载页面上的元素,直到你的机器人搜索,或者弹出改变元素的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