无法使用selenium和python访问页面上的某些内容

时间:2017-11-08 23:33:46

标签: python selenium

我在python脚本中使用selenium登录到一个网站,在那里我可以获得授权密钥来访问他们的API。我能够登录并导航到提供授权密钥的页面,我正在使用chrome驱动程序进行测试,所以我可以看到发生了什么。当我到达显示密钥的最后一页时,我找不到访问它的方法。我无法在页面源中看到它,当我尝试通过页面元素外部html访问时,它不会打印页面上显示的值。这是我在浏览器中看到的屏幕截图(我对访问响应正文中显示的内容感兴趣):

enter image description here

这是我用来尝试访问内容的代码段:

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

什么都不返回。有没有办法从页面中提取这个键?

2 个答案:

答案 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)