我在python脚本中使用selenium登录到一个网站,在那里我可以获得授权密钥来访问他们的API。我能够登录并导航到提供授权密钥的页面,我正在使用chrome驱动程序进行测试,所以我可以看到发生了什么。当我到达显示密钥的最后一页时,我找不到访问它的方法。我无法在页面源中看到它,当我尝试通过页面元素外部html访问时,它不会打印页面上显示的值。这是我在浏览器中看到的屏幕截图(我对访问响应正文中显示的内容感兴趣):
这是我用来尝试访问内容的代码段:
auth_key = WebDriverWait(sel_browser, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="responseBodyContent"]')))
print auth_key.get_attribute("outerHTML")
这就是print语句返回的内容:
<pre id="responseBodyContent"></pre>
我也试过了:
print auth_key.text
什么都不返回。有没有办法从页面中提取这个键?
答案 0 :(得分:1)
看起来您需要等待元素然后等待文本的自定义等待。
首先,添加一个类,查找元素,然后获取元素的innerHTML
。最后,测量弦的长度
请参阅下面的示例。
class element_text_not_empty(object):
def __init__(self, locator):
self.locator = locator
def __call__(self, driver):
try:
element = driver.find_element(*self.locator)
if(len(element.get_attribute('innerHTML').strip())>0):
return element.get_attribute('innerHTML')
else:
return False
except Exception as ex:
print("Error while waiting: " + str(ex))
return False
driver = webdriver.Chrome(chrome_path)
...
...
try:
print("Start wait")
result = WebDriverWait(driver, 20).until(element_text_not_empty((By.XPATH, '//*[@id="responseBodyContent"]')))
print(result)
except Exception as ex:
print("Error: " + str(ex))
答案 1 :(得分:0)
由于属性值采用json格式的responseBodyContent,请尝试使用
authkey_text = json.loads(auth_key.get_attribute) print str(authkey_text)