使用selenium python复制文本区域

时间:2016-12-05 18:07:55

标签: python selenium web-scraping

我想使用selenium从文本框中复制所有值。到目前为止,我的代码看起来像

# -*- coding: UTF-8 -*
from selenium import webdriver    #open webdriver for specific browser
import requests
import time

def getListZip(zip,radius):
    browser = webdriver.Chrome()
    browser.get("https://www.freemaptools.com/find-zip-codes-inside-radius.htm")
    time.sleep(10)
    user = browser.find_element_by_css_selector("#tb_radiuskm")
    user.clear()
    user.send_keys(radius)
    user = browser.find_element_by_css_selector("#goto")
    user.clear()
    user.send_keys(zip)
    time.sleep(10)
    drawRadius = browser.find_element_by_css_selector("#contenttext > center:nth-child(8) > input:nth-child(1)")
    drawRadius.click()
    time.sleep(10)
    listZip= browser.find_element_by_xpath('//*[@id="tb_output"]').text
    return listZip

def main():
    zip = getListZip(43212,25)

if __name__ == "__main__":
    main()    

这应该返回近70个值,但它返回null。该程序将输入为邮政编码和半径,并将输出特定半径内的所有邮政编码。

我正在使用python 3.x

2 个答案:

答案 0 :(得分:3)

您要定位的元素是TEXTAREA。 .text获取元素的open标记和close标记之间的文本,例如<div>.text gets this text<div>。 TEXTAREA元素将其文本保存在value属性中。您可以使用

获取此信息
listZip = browser.find_element_by_css_selector("#tb_output").get_attribute("value")

我在这里更改了定位器因为你不需要XPath。 CSS选择器或ID更快。

加成:

您可以使用以下内容清除drawRadius的选择器。它比nth-child等更具体。

drawRadius = browser.find_element_by_css_selector("input[value='Draw Radius']")

答案 1 :(得分:0)

我在Java上测试过Selenium,经常遇到同样的问题。 id为“tb_output”的元素包含其他元素? 尝试使用...

listZip= browser.find_element_by_xpath('//*[@id="tb_output"]').innerHTML

代替:

listZip= browser.find_element_by_xpath('//*[@id="tb_output"]').text