-1

The program won't print anything

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome("C:\Program Files (x86)\chromedriver.exe")

driver.get('https://www.amazon.co.uk/s?rh=n%3A15488758031&language=en_GB&brr=1&rd=1')
kaste = driver.find_element(By.CLASS_NAME, 'sg-col-inner')
saites = kaste.find_elements(By.CLASS_NAME, 'a-link-normal s-underline-text s-underline-link-text s-link-style a-text-normal')

for saite in saites:
    adrese = saite.get_attribute('href')
    print(saite.text)

I tried it with titles and links, nothing prints. I get output: The thread 'MainThread' (0x1) has exited with code 0 (0x0). The program 'python.exe' has exited with code 0 (0x0).

I was expecting it to print the link.

  • 1
    Your `saites` variable is empty and cannot be iterated over, thus you get no printed variable. Alter your query to find the right elements – ViaTech Mar 04 '23 at 12:46
  • Are you expecting it to find elements that have ALL of those class names, or that have ANY of those class names? – John Gordon Mar 04 '23 at 14:16

4 Answers4

0

Try find by xpath

saites = kaste.find_elements(By.XPATH, "//h2[contains(@class, 'a-size-mini')]//a[contains(@class, 'a-link-normal')]")
Anonymous
  • 5
  • 5
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Blue Robin Mar 09 '23 at 04:19
0

The problem is this line

saites = kaste.find_elements(By.CLASS_NAME, 'a-link-normal s-underline-text s-underline-link-text s-link-style a-text-normal')

By.CLASS_NAME expects only one class name and you've sent it four. Convert it to a CSS selector and it will work. In CSS selector syntax, a class name is prefaced with a "." so a class="a-link-normal" becomes .a-link-normal.

saites = kaste.find_elements(By.CSS_SELECTOR, '.a-link-normal.s-underline-text.s-underline-link-text.s-link-style.a-text-normal')

Rather than hitting the page twice, you can also combine your two locators into one,

driver.get('https://www.amazon.co.uk/s?rh=n%3A15488758031&language=en_GB&brr=1&rd=1')
saites = driver.find_elements(By.CSS_SELECTOR, '.sg-col-inner .a-link-normal.s-underline-text.s-underline-link-text.s-link-style.a-text-normal')

for saite in saites:
    adrese = saite.get_attribute('href')
    print(saite.text)
JeffC
  • 22,180
  • 5
  • 32
  • 55
0

You were close enough. To print the links you have to induce WebDriverWait for visibility_of_all_elements_located() and using List Comprehension you can use either of the following locator strategies:

  • Using CSS_SELECTOR:

    driver.get('https://www.amazon.co.uk/s?rh=n%3A15488758031&language=en_GB&brr=1&rd=1')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#sp-cc-accept"))).click()
    print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.a-link-normal.s-underline-text.s-underline-link-text.s-link-style.a-text-normal")))])
    
  • Using XPATH:

    driver.get('https://www.amazon.co.uk/s?rh=n%3A15488758031&language=en_GB&brr=1&rd=1')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#sp-cc-accept"))).click()
    print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//a[@class='a-link-normal s-underline-text s-underline-link-text s-link-style a-text-normal']")))])
    
  • Console Output:

    ['https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfYXRmX2Jyb3dzZToyMDEyMDI5MTA5MDM5ODo6MDo6&url=%2FBluetooth-headphones-wireless-separable-automatic-black%2Fdp%2FB09YTDNLLZ%2Fref%3Dsr_1_1_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-1-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9hdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfYXRmX2Jyb3dzZToyMDA2NzQxOTExNjUwNzo6MDo6&url=%2FBetron-Earphones-Headphones-Definition-BlackBerry-Black%2Fdp%2FB00I3LTQ9O%2Fref%3Dsr_1_2_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-2-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9hdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfYXRmX2Jyb3dzZToyMDA4NzQxMzgyNzc5ODo6MDo6&url=%2FSoundMAGIC-E50-Headphones-Microphone-Comfortable-Black-Red%2Fdp%2FB09YH4H5L4%2Fref%3Dsr_1_3_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-3-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9hdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/Apple-AirPods-Pro-2nd-generation/dp/B0BDJ37NF5/ref=sr_1_4?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-4', 'https://www.amazon.co.uk/Apple-Airpods-Charging-latest-Model/dp/B07PZR3PVB/ref=sr_1_5?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-5', 'https://www.amazon.co.uk/Apple-EarPods-with-Lightning-Connector/dp/B01M1EEPOB/ref=sr_1_6?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-6', 'https://www.amazon.co.uk/Bluetooth-Headphones-Cancelling-Btootos-Waterproof-Black/dp/B0BCKHQGJN/ref=sr_1_7?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-7', 'https://www.amazon.co.uk/Sony-WH-1000XM4-Cancelling-Wireless-Headphones-Black/dp/B08C7KG5LP/ref=sr_1_8?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-8', 'https://www.amazon.co.uk/Bluetooth-Headphones-Cancelling-Earphones-Waterproof-Black/dp/B0B63LNZBW/ref=sr_1_9?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-9', 'https://www.amazon.co.uk/Samsung-Wireless-Earphones-Manufacturer-Warranty-Mystic-Black/dp/B0BDGK6FTB/ref=sr_1_10?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-10', 'https://www.amazon.co.uk/Sony-WF-1000XM4-Wireless-Cancelling-Headphones-Black/dp/B095DNPH4R/ref=sr_1_11?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-11', 'https://www.amazon.co.uk/FAMOO-Bluetooth-Headphones-Waterproof-Earphones-Black/dp/B0B9SSMH7Z/ref=sr_1_12?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-12', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfbXRmX2Jyb3dzZToyMDA3NTY5NjAyNjMwNzo6MDo6&url=%2FBetron-Headphones-Definition-Tangle-Free-Replaceable-Red-Mic-Control%2Fdp%2FB00N771OH6%2Fref%3Dsr_1_13_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-13-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9tdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfbXRmX2Jyb3dzZToyMDA2NzQxODcwNjIwNzo6MDo6&url=%2FBetron-Microphone-Type-Smartphones-connectivity-Black%2Fdp%2FB07ZP76C8K%2Fref%3Dsr_1_14_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-14-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9tdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfbXRmX2Jyb3dzZToyMDExNjI1NTI0NjE5ODo6MDo6&url=%2FCASCHO-Bluetooth-Headphones-Waterproof-Earphones-Black%2Fdp%2FB0BDQYTLF5%2Fref%3Dsr_1_15_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-15-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9tdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/TOZO-Bluetooth-Wireless-Headphones-Waterproof-Black/dp/B07J2Z5DBM/ref=sr_1_16?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-16', 'https://www.amazon.co.uk/Bluetooth-Headphones-Cancelling-Earphones-Waterproof-white/dp/B0B65B14L1/ref=sr_1_17?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-17', 'https://www.amazon.co.uk/JBL-Wave-200TWS-Wireless-Headphones-Black/dp/B09HGGV5R5/ref=sr_1_18?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-18', 'https://www.amazon.co.uk/Sony-WF-C500-Wireless-Headphones-Built-Black/dp/B09FKGJ1CB/ref=sr_1_19?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-19', 'https://www.amazon.co.uk/Headphones-Bluetooth-Cancellation-Waterproof-Earphones-white/dp/B0BFPQDXSG/ref=sr_1_20?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-20', 'https://www.amazon.co.uk/IKG-Bluetooth-Headphones-Earphones-Waterproof-White/dp/B0B9FPD2WB/ref=sr_1_21?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-21', 'https://www.amazon.co.uk/Bluetooth-Headphones-Cancelling-Waterproof-Earphones-Black/dp/B0BGXJ6LJZ/ref=sr_1_22?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-22', 'https://www.amazon.co.uk/Wireless-Headphones-Bluetooth-Cancellation-Earphones-white/dp/B0BJCTH4NH/ref=sr_1_23?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-23', 'https://www.amazon.co.uk/Wireless-Headphones-Soundcore-Bluetooth-Playtime/dp/B099DP3617/ref=sr_1_24?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-24', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfbXRmX2Jyb3dzZToyMDExODIwODg1Njk5ODo6MDo6&url=%2FCASCHO-Bluetooth-Headphones-Waterproof-Earphones-Rose-gold%2Fdp%2FB0BKSZ27WB%2Fref%3Dsr_1_25_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-25-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9tdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfbXRmX2Jyb3dzZToyMDExODUxMjU3Mzk5ODo6MDo6&url=%2FBetron-Earphones-Headphones-Definition-BlackBerry-Red-Control-Mic%2Fdp%2FB00NEYPWL6%2Fref%3Dsr_1_26_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-26-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9tdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/sspa/click?ie=UTF8&spc=MToyOTM5NTQzMzA0NzAzNjMxOjE2Nzc5Njc4NDI6c3BfbXRmX2Jyb3dzZToyMDEwMjI4ODM3NTc5ODo6MDo6&url=%2FJVC-HA-Z66T-Z-Bluetooth-Lightweight-Resistance-Green%2Fdp%2FB0B9C4DSFK%2Fref%3Dsr_1_27_sspa%3Fbrr%3D1%26qid%3D1677967842%26rd%3D1%26s%3Delectronics%26sr%3D1-27-spons%26sp_csd%3Dd2lkZ2V0TmFtZT1zcF9tdGZfYnJvd3Nl%26psc%3D1', 'https://www.amazon.co.uk/CASCHO-Bluetooth-Headphones-Waterproof-Earphones-Rose-gold/dp/B0BKSZ27WB/ref=sr_1_28?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-28', 'https://www.amazon.co.uk/CASCHO-Bluetooth-Headphones-Waterproof-Earphones-Black/dp/B0BDQYTLF5/ref=sr_1_29?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-29', 'https://www.amazon.co.uk/Soundcore-Wireless-Customized-Waterproof-Bluetooth-Black/dp/B08KDZ2NZX/ref=sr_1_30?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-30', 'https://www.amazon.co.uk/Bose-QuietComfort-Cancelling-Personalized-Cancellation-Triple-Black/dp/B0B4PSQHD5/ref=sr_1_31?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-31', 'https://www.amazon.co.uk/Soundcore-AI-Enhanced-Bluetooth-Easy-Pairing-Lightweight-Black/dp/B09DXW29JB/ref=sr_1_32?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-32', 'https://www.amazon.co.uk/Wireless-Bluetooth-Headphones-Earphones-Waterproof-Midnight-Black/dp/B0BFL83X8S/ref=sr_1_33?brr=1&qid=1677967842&rd=1&s=electronics&sr=1-33']
    
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
0

the issue in your code may be due to the incorrect locator used to find the elements. try this.

kaste = driver.find_element(By.CLASS_NAME, 's-result-list')
saites = kaste.find_elements(By.CSS_SELECTOR, 'a.a-link-normal.a-text-normal')

for saite in saites:
    adrese = saite.get_attribute('href')
    print(adrese)
Lakshitha Samod
  • 383
  • 3
  • 10