从输入字段复制文本并使用python将其保存到变量中

时间:2014-08-18 22:05:22

标签: javascript python selenium

如何使用Selenium从没有value属性的输入中获取文本?问题是,当页面加载并且文本没有出现在html上时,它们会自动填充(可能使用JavaScript),因此我找不到任何代表它的内容。

image

3 个答案:

答案 0 :(得分:0)

文本在框中后,您可以使用WebElement.get_attribute('value')访问该文本,其中WebElement是您要从中提取文字的文本框。

答案 1 :(得分:0)

您可以实施自己的预期条件。以下作品

的HTML / JS:

<html>
<head>
<script type="text/javascript" >
    window.onload = function(){
        document.getElementById("string").value = "hello";
    };
</script>
</head>
<body>
        <input id="string" type="text" value="">

</body>
</html>

蟒:

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

class regex_to_be_present_in_element_value(object):
    def __init__(self, locator, regex):
        self.locator = locator
        self.regex = regex

    def __call__(self, driver):
        try:
            element_text = EC._find_element(driver,
                                         self.locator).get_attribute("value")
            if element_text:
                return re.match(self.regex, element_text)
            else:
                return False
        except StaleElementReferenceException:
                return False

driver = webdriver.Firefox()
driver.get("file:///path/to/the/htmlfile.html")
try:
    element = WebDriverWait(driver, 10).until(
        regex_to_be_present_in_element_value((By.ID, "string"), "he*")
    )
finally:
    driver.quit()

它只是等待,直到指定元素的value属性中的文本与传递给构造函数的正则表达式字符串生成的正则表达式匹配,在本例中只是“hello”。 “他*”匹配“你好”。

我用它作为制作课程的指南:https://selenium.googlecode.com/git/docs/api/py/_modules/selenium/webdriver/support/expected_conditions.html#text_to_be_present_in_element_value

答案 2 :(得分:0)

使用名为win32clipboard的模块,它是pywin32的一部分,解决了我的问题。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import win32clipboard

element.send_keys(Keys.CONTROL, 'a') #highlight all in box
element.send_keys(Keys.CONTROL, 'c') #copy

win32clipboard.OpenClipboard()
text = win32clipboard.GetClipboardData() #paste
win32clipboard.CloseClipboard()

print text