2016-06-15 17 views
1

私はこの問題の解決策をしばらくは探しています。Selenium Pythonバインディングで変数を関数に渡すことができません

私はセレンとBeautifulSoup4を使用しています。

私は、この関数にcontainer_number変数を渡す:私はこれを行うと

find_container_number=wait.until(EC.presence_of_element_located((By.LINK_TEXT,container_number))) 

、container_numberに格納された値は、(私には意味がない)が見つかりません。変数container_numberは120001に等しい。 ただし、container_numberを120001に設定すると、container_number="120001" と書いても問題ありません。私のスクリプトを実行するときに

browser = webdriver.Firefox() 

def change_location(number): 
#print number 
soup=bs(browser.page_source, 'html.parser') 
found = len(soup.find_all(text=re.compile("Indefinite"))) 
if found>1: 
    indef=soup.find_all(text=re.compile("Indefinite")) 
    indef.pop(0) 
    for items in indef: 
     temp = items.findPrevious('a') 
     #print temp 
     container_number=temp.find(text=True) 
     print container_number 
     print type(container_number) 
     container_number=str(container_number) 
     print type(container_number) 
     print container_number 
     #container_number="120001" if i uncomment this line it works 
     find_container_number=wait.until(EC.presence_of_element_located((By.LINK_TEXT,container_number))) 

はここに私の出力です:

は、ここに私の関連するコードです。

120001 
<class 'bs4.element.NavigableString'> 
<type 'str'> 
120001 
Traceback (most recent call last): 
    File ".\complete.py", line 86, in <module> 
    change_location(number) 
    File ".\complete.py", line 41, in change_location 
    find_container_number=wait.until(EC.presence_of_element_located((By.LINK_TEXT,container_number))) 
    File "C:\Python27\lib\site-packages\selenium-2.53.2-py2.7.egg\selenium\webdriver\support\wait.py", line 80, in until 
    raise TimeoutException(message, screen, stacktrace) 
selenium.common.exceptions.TimeoutException: Message: 
Stacktrace: 
    at FirefoxDriver.prototype.findElementInternal_ (file:///c:/users/rratclif/appdata/local/temp/tmpf3rtti/extensions/f 
[email protected]/components/driver-component.js:10770) 
    at FirefoxDriver.prototype.findElement (file:///c:/users/rratclif/appdata/local/temp/tmpf3rtti/extensions/[email protected] 
ooglecode.com/components/driver-component.js:10779) 
    at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/rratclif/appdata/local/temp/tmpf3rtti/extensions/fx 
[email protected]/components/command-processor.js:12661) 
    at DelayedCommand.prototype.executeInternal_ (file:///c:/users/rratclif/appdata/local/temp/tmpf3rtti/extensions/fxdr 
[email protected]/components/command-processor.js:12666) 
    at DelayedCommand.prototype.execute/< (file:///c:/users/rratclif/appdata/local/temp/tmpf3rtti/extensions/[email protected] 

答えて

1

これは推測ですが、使用する前に値をトリムする必要がある場合があります

container_number = temp.find(text=True).strip() 
find_container_number = wait.until(EC.presence_of_element_located((By.LINK_TEXT,container_number))) 

それとも、単に.get_text()を使用します。

temp = items.findPrevious('a') 
container_number = temp.get_text(strip=True) 
+0

ありがとうございました!!値をトリミングするだけでは機能しませんでしたが、.get_text(strip = True)を使用すると完全に機能しました! –

関連する問題