Webdriver / BeautifulSoup Получение моей программы, чтобы проверить, существует ли часть строки на веб-странице - PullRequest
0 голосов
/ 23 апреля 2020

Я пишу бота, который автоматически покупает предметы. В настоящее время я работаю над тем, чтобы поместить информацию о продукте в словарь, озаглавленный INFO, и ссылаться на нее всякий раз, когда мне нужно указать c product / color / et c. В настоящее время мой код (особенно в findProduct ()) проверяет, совпадает ли индекс в temp_tuple, например, с INFO ['product'].

В моем случае я ищу продукт, и мой код возвращается ошибка, потому что в конце некоторых имен есть пробел, и мой код не может справиться с этим.

Однако я хочу изменить его, чтобы проверить, находится ли строка на веб-странице, чтобы мой код работает даже с этим дополнительным пространством.

Достаточно моего кода, который работает как есть:

#!/usr/bin/env python3
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.support.select import Select
import time
import requests
import bs4 as bs
from splinter import Browser
import helpers
from selenium.common.exceptions import ElementNotInteractableException
from config import INFO
def __init__(self, **info):
        self.base_url = 'http://www.supremenewyork.com/'
        self.shop = 'shop/all/'
        self.checkout = 'checkout/'
        self.info = info





class supremeBot(object):

def __init__(self, **info):
    self.base_url = 'http://www.supremenewyork.com/'
    self.shop = 'shop/all/'
    self.info = info

def initializeBrowser(self):
    driverz = self.info["driver"]
    path = helpers.get_driver_path(driver)
    if driverz == "geckodriver":
        self.b = Browser()
    elif driverz == "chromedriver":
        executable_path = {"executable_path": path}
        self.b = Browser('chrome', **executable_path)


#This looks for the product based on what the category is 
def findProduct(self):
    category =  str(INFO['category'])
    source = requests.get("http://www.supremenewyork.com/shop/all/"+category).text
    soup = bs.BeautifulSoup(source, 'lxml')
    temp_link = []
    temp_tuple = []
    for link in soup.find_all('a', href=True):
        temp_tuple.append((link['href'], link.text))
    for i in temp_tuple:
        if i[1] == INFO['product'] or i[1] == INFO['color']: # <------------ I want this to recognize a partial string
            temp_link.append(i[0])
            #print(temp_link)

    #This creates end of the final link
    self.final_link = list(
        set([x for x in temp_link if temp_link.count(x) == 2]))[0]

        #Concatenates the previous link w/ the website
    link = 'http://www.supremenewyork.com'+str(self.final_link)
    driver.get(link)        

if __name__ == "__main__":
    driver = webdriver.Chrome('./chromedriver')


'''
BOT = supremeBot(**INFO)
BOT.findProduct()
order()
'''
BOT = supremeBot(**INFO)

found_product = False
counter = 1
max_iter = 5
while not found_product and counter < max_iter:
    found_product = BOT.findProduct()
    print("We tried ",counter," times.")  
    counter +=1
    if found_product:
        print('Couldn\'t find it')
        continue
    else:
        print('found it')
    order()
INFO = {
    "driver": "chromedriver",
    "product": "Supreme®/MLB New Era®", # "Big Duffle Bag " is an example of a product that has the space after it
    "color": "Navy",
    "category": "hats",
    "size": "Medium",
    "namefield": "Bucky McNuts",
    "emailfield": "email@email.com",
    "phonefield": "(555)555-5555",
    "addressfield": "321 St",
        }

В этом случае, если вы замените Supreme® / MLB New Era® на «Big Duffle Bag», вы Посмотрите, что код не запускается, если вы удалили пробел после слова bag.

Если кто-нибудь может помочь, я был бы очень признателен!

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете сделать эту проверку для частичной строки:

if "part" in "partstring":
   print("the word 'part' is within 'partsting'")

Возможное использование здесь:

if INFO['product'] in i[1].lower() or INFO['color'] in i[1].lower():
  #do something

.lower() должен убедиться, что текст на сайте в нижнем регистре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...