2017-10-10 19 views
0

私は単にWebページに移動して空き状況を確認しようとしています。在庫状況を確認し、在庫があるかどうか試してみてください。私はいくつかのアクションを実行したい(この例のprint "Found")。テストすると、変数InStockCheckは文字列として登録されていないようです。私はそれを使用すると信じていますシンプルif文が文字列を比較していない

InStockCheck = driver.find_element_by_id("availability").text 

それは文字列ではありませんか?

電流出力は次のようになります。

InStock. 
Yellow 

所望の出力:

InStock. 
Found 

コード:

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import TimeoutException 

import bs4 as bs 

FoundItem = "Nope" 
driver = webdriver.Safari() 

while (FoundItem == "Nope"): 

    #driver = webdriver.Safari() 
    driver.get("https://www.amazon.ca/gp/product/B01MUAGZ49/ref=s9_acsd_top_hd_bw_bHp5rsB_c_x_w?pf_rd_m=A3DWYIK6Y9EEQB&pf_rd_s=merchandised-search-3&pf_rd_r=34J7S43PK58HEWFWQRCY&pf_rd_t=101&pf_rd_p=1a0d15fb-8f11-58d0-9960-246ad05b4dc8&pf_rd_i=16329250011") 

    #SourceCodeTest = driver.page_source 

    #Soup = bs.BeautifulSoup(SourceCodeTest, "lxml") 

    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "availability"))) 
    InStockCheck = driver.find_element_by_id("availability").text 
    InStockCheck = InStockCheck.replace(" ","") 
    print(InStockCheck) 

    if InStockCheck == "InStock.": 
     print("Found") 
    else: 
     print("Yellow") 

print("Pink") 
+6

空白やその他の見えない文字をチェックしましたか? – pvg

+4

ええ、 'InStockCheck = InStockCheck.strip()'を使うと、印刷時に改行があるようです。 –

+0

@pvg「見えない文字をチェックする」方法を知らない。 Jeanが述べた解決策は、私の将来のデバッグには役立ちましたが、どうやって見えない文字をチェックするのでしょうか? – Aiden

答えて

-1

私はサファリを持っていないので、私はChromeを使用していました。

driver = webdriver.Chrome() 

これは何らかの理由で望ましい結果をもたらします。 whileループから脱出するための条件を与えてください。例えば、

# other imports 
import time 

# other code 
numberOfRetries = 0 

while (FoundItem == "Nope"): 
    # other code 

    if InStockCheck == "InStock.": 
     print("Found") 
     break 
    elif numberOfTries > 4: 
     print("Not found after waiting for 5 seconds") 
     break 
    else: 
     print("Yellow") 
     numberOfRetries = numberOfRetries + 1 
     time.sleep(1) 

print("Pink") 
0

あなただけの文字列をチェックし、その文字列に応じて条件を追加し、場合、他のいずれかを追加する前printを使って自分でチェックすることができます。

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import TimeoutException 

import bs4 as bs 
import sys 
FoundItem = "Nope" 
driver = webdriver.Chrome() 

while (FoundItem == "Nope"): 

    #driver = webdriver.Safari() 
    driver.get("https://www.amazon.ca/gp/product/B01MUAGZ49/ref=s9_acsd_top_hd_bw_bHp5rsB_c_x_w?pf_rd_m=A3DWYIK6Y9EEQB&pf_rd_s=merchandised-search-3&pf_rd_r=34J7S43PK58HEWFWQRCY&pf_rd_t=101&pf_rd_p=1a0d15fb-8f11-58d0-9960-246ad05b4dc8&pf_rd_i=16329250011") 

    #SourceCodeTest = driver.page_source 

    #Soup = bs.BeautifulSoup(SourceCodeTest, "lxml") 

    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "availability"))) 
    InStockCheck = driver.find_element_by_id("availability").text 
    InStockCheck_ori = InStockCheck.strip() 
    print(InStockCheck_ori) 
    InStockCheck1 = InStockCheck.replace(" ","") 
    print(InStockCheck1) 

出力:

In Stock. 
InStock. 
関連する問題