2017-10-10 1 views
0

J'essaie simplement de naviguer vers une page Web et de vérifier la disponibilité. Quand je trouve l'état de la disponibilité et que j'essaie de voir si c'est "En stock". alors je veux effectuer une action (dans l'exemple print "Found"). Quand je le teste, la variable InStockCheck ne semble pas s'inscrire comme une chaîne. Je crois que lorsque j'utiliseSimple si la déclaration ne fonctionne pas Comparaison des chaînes

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

que ce n'est pas une chaîne?

sortie actuelle est:

InStock. 
Yellow 

sortie souhaitée:

InStock. 
Found 

code:

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

Avez-vous vérifié s'il y a des espaces ou d'autres caractères invisibles? – pvg

+4

ouais vous pourriez utiliser 'InStockCheck = InStockCheck.strip()' il semble avoir un saut de ligne quand vous l'imprimez. –

+0

@pvg Je ne sais pas comment "vérifier les caractères invisibles". La solution que Jean a indiqué n'a fonctionné que pour mon débogage futur, comment vérifierais-je les caractères invisibles? – Aiden

Répondre

-1

Je n'ai pas Safari, donc j'utilisé Chrome.

driver = webdriver.Chrome() 

Cela donne le résultat souhaité pour une raison quelconque. Assurez-vous de donner quelques conditions pour sortir de la boucle while. Par exemple,

# 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

Vous pouvez simplement vérifier vous à l'aide print avant d'ajouter if-else, vérifiez la chaîne, puis ajoutez la condition selon cette chaîne:

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) 

sortie:

In Stock. 
InStock.