URL必须是字符串selenium-selenium.common.exceptions.InvalidArgumentException:消息:无效参数:'url'必须是字符串

时间:2020-08-23 15:40:34

标签: python selenium selenium-webdriver python-requests

我正在制作一个脚本,通过发出请求来自动完成衣服的购买过程,但是我得到一个错误,指出url必须是一个字符串,标题中没有特定错误,这使下面的代码无法确定它所引用的url但对此的任何帮助将不胜感激,谢谢-亚瑟

from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import ElementNotInteractableException
from selenium.webdriver.common.by import By
import random
import time
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import requests
import webbrowser
from discord_webhooks import DiscordWebhooks
from datetime import datetime

class Profile:

  def __init__ (self, profileName, name, email, tel, address1, address2, zip, city, state, country, number, month, year, cvv):

      self.profileName = profileName
      self.name = name
      self.email = email
      self.tel = tel
      self.address1 = address1
      self.address2 = address2
      self.zip = zip
      self.city = city
      self.state = state
      self.country = country
      self.number = number
      self.month = month
      self.year = year
      self.cvv = cvv

class Item:

  def __init__ (self, product, color, size):

      self.product = product
      self.color = color
      self.size = size

chrome_options = Options()
chrome_options.add_argument("--headless")
profiles = [Profile]
webhook = DiscordWebhooks('empty for stack overflow')
headless = False

def lookingForItem():
  print("Monitoring")
  testItem = Item("Acrylic Visor 6-Panel", "Red", "N/A")
  monitor(testItem)
  productLink = findProduct(testItem)
  checkout(productLink, testItem)

def checkout(productLink, item):
  startTime = time.perf_counter()
  userProfile = Profile("test", "Test Name", "test@gmail.com", "1111111111", "1 Test St", "", "10001", "New York", "NY", "USA", "4111111111111111", "08", "2020", "111")
  driver.get(productLink)
  done = False
  delay = 0
  if item.size.lower() != 'n/a' and item.size.lower() != "any":
      if item.size.lower() == 'random':
          driver.execute_script("""var sizePicker = Math.floor(Math.random() * document.getElementById('s').length);
          document.getElementById('s').selectedIndex = sizePicker;""")
      else:
          driver.execute_script("""for (var i=0; i<document.getElementById('s').length; i++){{
                          if (document.getElementById('s').options[i].text == '{}'){{
                            document.getElementById('s').selectedIndex = i;
                          }}
                        }}""".format(item.size))
  while(not done):
      done = addToCart()
  done = False
  while(not done):
      done = goToCheckout()
  driver.execute_script("""document.getElementById('order_billing_name').value = '{}';
  document.getElementById('order_email').value = '{}';
  document.getElementById('order_tel').value = '{}';
  document.getElementById('bo').value = '{}';
  document.getElementById('oba3').value = '{}';
  document.getElementById('order_billing_zip').value = '{}';
  document.getElementById('order_billing_city').value = '{}';
  document.getElementById('order_billing_state').value = '{}';
  document.getElementById('order_billing_country').value = '{}';
  document.getElementById('rnsnckrn').value = '{}';
  document.getElementById('credit_card_month').value = '{}';
  document.getElementById('credit_card_year').value = '{}';
  document.getElementsByClassName('iCheck-helper')[1].click();""".format(
  userProfile.name, userProfile.email, userProfile.tel,
  userProfile.address1, userProfile.address2, userProfile.zip,
  userProfile.city, userProfile.state, userProfile.country,
  userProfile.number, userProfile.month, userProfile.year, userProfile.cvv))
  print("Delaying")
  time.sleep(delay/1000)
  driver.find_element_by_xpath('//*[@id="orcer"]').send_keys(userProfile.cvv)
  driver.find_element_by_xpath('//*[@id="cart-cc"]/fieldset/p[2]/label/div/ins').click()
  driver.find_element_by_xpath('//*[@id="pay"]/input').click()
  #webbrowser.open("https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LeWwRkUAAAAAOBsau7KpuC9AV-6J8mhw4AjC3Xz&co=aHR0cHM6Ly93d3cuc3VwcmVtZW5ld3lvcmsuY29tOjQ0Mw..&hl=en&v=oqtdXEs9TE9ZUAIhXNz5JBt_&size=invisible&cb=h0o95sjo44ya")
  print("Processing")
  endTime = time.perf_counter()
  finalTime = round((endTime - startTime), 3)
  sendWebhook(productLink, item, finalTime)

def sendWebhook(productLink, item, finalTime):
  webhook.set_content(color=0xCC3333,title='cheebBot1.0')
  webhook.add_field(name='Status', value='**Payment failed!**')
  webhook.add_field(name='Date/Time', value=str(datetime.now()))
  webhook.add_field(name='Item', value='**'+ item.product + '**')
  webhook.add_field(name='Item Link', value=productLink)
  webhook.add_field(name='Color', value=item.color)
  webhook.add_field(name='Size', value=item.size)
  webhook.add_field(name='Checkout Time', value=str(finalTime) + ' s')
  webhook.send()

def findProduct(item):
  container = driver.find_element_by_xpath('//*[@id="container"]').find_elements_by_class_name('inner-article')
  for article in container:
      if article.find_element_by_class_name("product-name").find_element_by_class_name("name-link").text == item.product and article.find_element_by_class_name("product-style").find_element_by_class_name("name-link").text == item.color:
          return(article.find_element_by_class_name("product-name").find_element_by_class_name("name-link").get_attribute("href"))

def monitor(item):
  try:
      driver.find_elements_by_xpath('//div[contains(text(), "' + item.product + '")]')
  except NoSuchElementException:
      driver.refresh()
      monitor(item)
  return

def productListed(product):
  try:
      driver.find_element_by_xpath("//*[contains(text(), " + product + ")]")
  except NoSuchElementException:
      time.sleep(.5)
      driver.refresh()
      productListed(product)
  return

def addToCart():
  try:
      driver.find_element_by_xpath('//*[@id="add-remove-buttons"]/input').click()
  except ElementNotInteractableException:
      time.sleep(.01)
      #driver.refresh()
      return False
  print("Adding to cart")
  return True

def goToCheckout():
  try:
      driver.find_element_by_xpath('//*[@id="cart"]/a[2]').click()
  except ElementNotInteractableException:
      time.sleep(.01)
      return False
  print("Checking out")
  return True

if __name__ == "__main__":
  if headless:
      driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=chrome_options)
  else:
      driver = webdriver.Chrome(ChromeDriverManager().install())
  driver.get("https://www.supremenewyork.com/shop/shirts/ziq2otwjc/c9qzbgrlm")
  lookingForItem()

#class euProfile: 
#   def __init__(self, name, age):
      

2 个答案:

答案 0 :(得分:0)

在此代码中可能有错误:

def findProduct(item):
  container = driver.find_element_by_xpath('//*[@id="container"]').find_elements_by_class_name('inner-article')
  for article in container:
      if article.find_element_by_class_name("product-name").find_element_by_class_name("name-link").text == item.product and article.find_element_by_class_name("product-style").find_element_by_class_name("name-link").text == item.color:
          return(article.find_element_by_class_name("product-name").find_element_by_class_name("name-link").get_attribute("href"))

如果代码不满足for循环中的条件,则代码不会回退

答案 1 :(得分:0)

from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import ElementNotInteractableException
from selenium.webdriver.common.by import By
import random
import time
from selenium.webdriver.chrome.options import Options
#from webdriver_manager.chrome import ChromeDriverManager
import requests
import webbrowser
from discord_webhooks import DiscordWebhooks
from datetime import datetime
from selenium import webdriver


class Profile:

    def __init__(self, profileName, name, email, tel, address1, address2, zip, city, state, country, number, month, year, cvv):
        self.profileName = profileName
        self.name = name
        self.email = email
        self.tel = tel
        self.address1 = address1
        self.address2 = address2
        self.zip = zip
        self.city = city
        self.state = state
        self.country = country
        self.number = number
        self.month = month
        self.year = year
        self.cvv = cvv


class Item:

    def __init__(self, product, color, size):
        self.product = product
        self.color = color
        self.size = size


class Scraper:
    def __init__(self, headless):
        chrome_options = Options()
        chrome_options.add_argument("--headless")
        profiles = [Profile]
        self.webhook = DiscordWebhooks('empty for stack overflow')

        if headless:
            self.driver = webdriver.Chrome(executable_path="chromedriver.exe", chrome_options=chrome_options)
        else:
            self.driver = webdriver.Chrome(executable_path="chromedriver.exe")

        self.driver.get("https://www.supremenewyork.com/shop/shirts/ziq2otwjc/c9qzbgrlm")


    def lookingForItem(self):
        print("Monitoring")
        testItem = Item("Acrylic Visor 6-Panel", "Red", "N/A")
        self.monitor(testItem)
        productLink = self.findProduct(testItem)
        print(productLink)
        self.checkout(productLink, testItem)


    def checkout(self, productLink, item):
        startTime = time.perf_counter()
        userProfile = Profile("test", "Test Name", "test@gmail.com", "1111111111", "1 Test St", "", "10001", "New York", "NY", "USA", "4111111111111111", "08",
                              "2020", "111")
        self.driver.get(productLink)
        done = False
        delay = 0
        if item.size.lower() != 'n/a' and item.size.lower() != "any":
            if item.size.lower() == 'random':
                self.driver.execute_script("""var sizePicker = Math.floor(Math.random() * document.getElementById('s').length);
              document.getElementById('s').selectedIndex = sizePicker;""")
            else:
                self.driver.execute_script("""for (var i=0; i<document.getElementById('s').length; i++){{
                              if (document.getElementById('s').options[i].text == '{}'){{
                                document.getElementById('s').selectedIndex = i;
                              }}
                            }}""".format(item.size))
        while (not done):
            done = self.addToCart()
        done = False
        while (not done):
            done = self.goToCheckout()
        self.driver.execute_script("""document.getElementById('order_billing_name').value = '{}';
          document.getElementById('order_email').value = '{}';
          document.getElementById('order_tel').value = '{}';
          document.getElementById('bo').value = '{}';
          document.getElementById('oba3').value = '{}';
          document.getElementById('order_billing_zip').value = '{}';
          document.getElementById('order_billing_city').value = '{}';
          document.getElementById('order_billing_state').value = '{}';
          document.getElementById('order_billing_country').value = '{}';
          document.getElementById('rnsnckrn').value = '{}';
          document.getElementById('credit_card_month').value = '{}';
          document.getElementById('credit_card_year').value = '{}';
          document.getElementsByClassName('iCheck-helper')[1].click();""".format(
            userProfile.name, userProfile.email, userProfile.tel,
            userProfile.address1, userProfile.address2, userProfile.zip,
            userProfile.city, userProfile.state, userProfile.country,
            userProfile.number, userProfile.month, userProfile.year, userProfile.cvv))
        print("Delaying")
        time.sleep(delay / 1000)
        self.driver.find_element_by_xpath('//*[@id="orcer"]').send_keys(userProfile.cvv)
        self.driver.find_element_by_xpath('//*[@id="cart-cc"]/fieldset/p[2]/label/div/ins').click()
        self.driver.find_element_by_xpath('//*[@id="pay"]/input').click()
        # webbrowser.open("https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LeWwRkUAAAAAOBsau7KpuC9AV-6J8mhw4AjC3Xz&co=aHR0cHM6Ly93d3cuc3VwcmVtZW5ld3lvcmsuY29tOjQ0Mw..&hl=en&v=oqtdXEs9TE9ZUAIhXNz5JBt_&size=invisible&cb=h0o95sjo44ya")
        print("Processing")
        endTime = time.perf_counter()
        finalTime = round((endTime - startTime), 3)
        self.sendWebhook(productLink, item, finalTime)


    def sendWebhook(self,productLink, item, finalTime):
        self.webhook.set_content(color=0xCC3333, title='cheebBot1.0')
        self.webhook.add_field(name='Status', value='**Payment failed!**')
        self.webhook.add_field(name='Date/Time', value=str(datetime.now()))
        self.webhook.add_field(name='Item', value='**' + item.product + '**')
        self.webhook.add_field(name='Item Link', value=productLink)
        self.webhook.add_field(name='Color', value=item.color)
        self.webhook.add_field(name='Size', value=item.size)
        self.webhook.add_field(name='Checkout Time', value=str(finalTime) + ' s')
        self.webhook.send()


    def findProduct(self, item):
        container = self.driver.find_element_by_xpath('//*[@id="container"]').find_elements_by_class_name('inner-article')
        for article in container:
            if article.find_element_by_class_name("product-name").find_element_by_class_name(
                    "name-link").text == item.product and article.find_element_by_class_name("product-style").find_element_by_class_name(
                    "name-link").text == item.color:
                return (article.find_element_by_class_name("product-name").find_element_by_class_name("name-link").get_attribute("href"))

        print("THERE IS NOT ELEMENT FOUND FOR THE HREF YOU ARE LOOKING FOR SO THIS WILL RETURN NONE")


    def monitor(self, item):
        try:
            self.driver.find_elements_by_xpath('//div[contains(text(), "' + item.product + '")]')
        except NoSuchElementException:
            self.driver.refresh()
            self.monitor(item)
        return