2016-12-05 67 views
1

我想使用硒複製文本框中的所有值。到目前爲止我的代碼看起來像使用硒python複製文本區域

# -*- 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

回答

3

你的目標元素是一個TEXTAREA。 .text獲取元素的打開和關閉標記之間的文本,例如<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']") 
+0

這是正確的答案 –

0

我已經測試硒對Java和經常我有同樣的問題。 ID爲「tb_output」的元素包含其他元素? 嘗試使用...

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

代替:

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