70021


商品をカートに入れるプログラムを書いているのですが、上手く動作しません。

ユーザのプロファイルを指定してseleniumを実行したくて追加しました。

[code]

    # options.add_argument('--user-data-dir=user')
    # options.add_argument('--profile-directory=profile')
    # options.add_argument('--remote-debugging-port=9222')
    
[/code]

これらのコードが原因と言う所までわかったのですが、これを無効にすると指定したユーザで実行出来ないので困っています。  
3行目のコードはheadlessにするために使用しています。  
下記のサイトを見て実装しました。

[seleniumのheadlessでプロファイルを使う際のエラー解消法](http://blog.sbfm.jp/archives/196)

[code]

    from bs4 import BeautifulSoup
    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    
    def add_cart(indexNum):
            options = webdriver.ChromeOptions()
            options.add_argument('--headless')
            # 以下のコードがあると、elementが取れないとエラー出力
            ## 下記のコードをコメントアウトすると正しく動作する。
            # options.add_argument('--user-data-dir=user')
            # options.add_argument('--profile-directory=profile')
            # options.add_argument('--remote-debugging-port=9222')
            driver = webdriver.Chrome('selenium/chromedriver', options=options)
    
            indexNum = indexNum - 1
            url = 'https://www.supremenewyork.com/shop/accessories/ona0i275t/u5ln1jxbe'
            #driver = self.driver
            driver.get(url)
    
            # 数量を指定
            element = driver.find_element_by_xpath('//*[@id="qty"]')
            print(element.text)
            select = Select(element)
            select.select_by_index(indexNum)
            
            # カートに入れる
            driver.find_element_by_css_selector("#add-remove-buttons > input").click()
            time.sleep(.2)
    
            # 下記のコードはカートに入った確認するためのテストコード
            driver.get('https://www.supremenewyork.com/shop/cart')
            soup = BeautifulSoup(driver.page_source, 'lxml')
            print(soup.body)
            driver.quit()
    
    add_cart(1)
    
[/code]

**エラー内容**

[code]

    Traceback (most recent call last):
      File "sup.py", line 197, in <module>
        Supreme.add_cart(1)
      File "sup.py", line 156, in add_cart
        element = driver.find_element_by_xpath('//*[@id="qty"]')
      File "/home/vagrant/anaconda3/envs/pinterest/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath
        return self.find_element(by=By.XPATH, value=xpath)
      File "/home/vagrant/anaconda3/envs/pinterest/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
        'value': value})['value']
      File "/home/vagrant/anaconda3/envs/pinterest/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
        self.error_handler.check_response(response)
      File "/home/vagrant/anaconda3/envs/pinterest/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="qty"]"}
    
[/code]

どなたか詳しい方お力を貸して頂けないでしょうか。  
よろしくお願いします。


CC BY-SA 4.0
2020-08-31T09:44:05.360
70015
2020-12-18T03:04:00.347
2020-08-31T11:21:12.777
3060
22565
question
python selenium
selenium の find_element_by_xpath でエラーが出力される


前回カートに入れた商品が残ったままだった事でページのHTMLが変化しており要素が存在しなかっただけでした。  
ご迷惑をおかけしました。

`driver.delete_all_cookies()`でアクセス前にcookieを削除したら上手く動作しました。


CC BY-SA 4.0
2020-08-31T13:45:52.923
70021
2020-08-31T13:45:52.923
22565
70015
answer