Hi there!
So I was hoping programming might be able to help with this. I am trying to learn how to use Selenium for personal projects.

I have tried using normal, straight up selenium but it does not support authorized proxies…
I have tried SeleniumBase, but when I got it working, there were WebRTC leaks that I could not avoid.
I have tried using Undetected-chrome but that too I was unable to get authorized proxies working…
For proxies, I tried seleniumwire as well. That seems to use its own SSL certificates which unfortunately as far as I can tell is easy to detect.
Main purpose for me is web scraping and or simple login to X site, enter X info and close.

So my question is… What is the proper way to use Selenium for automating functions while avoiding detection?

Thank you in advance.

EDIT: I made this post because I am hitting a wall at every turn, and I feel like I might just be approaching this the wrong way, or maybe I’m just missing something crucial. I was hoping someone with more experience could explain to me what is the correct way of doing it without cobbling it together with duct tape.

  • jflorez@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    6
    ·
    edit-2
    1 year ago

    You can do it with plain selenium all you need to set the proxy in the browser options.

    from selenium import webdriver

    PROXY_WITH_PORT= “111.222.333.443:8080” chrome_options = webdriver.ChromeOptions() chrome_options.add_argument(f’–proxy-server={PROXY_WITH_PORT}')

    chrome = webdriver.Chrome(chrome_options=chrome_options) chrome.get(“http://google.com”)

    In general you can pass any command like argument to the browser using options. For chrome you can find all the proxy related options here: https://www.chromium.org/developers/design-documents/network-settings/

    Also if you are using the latest selenium (4.10 I think) you don’t need to point to the chromedriver executable, selenium will automatically download it if it can’t find the driver

    Edit: more information about chrome arguments Edit: info about driver download

    • PracticalParrotOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Thank you. The problem with this is that it does not support authorized proxies though. You cannot pass user:pass through it. My janky solution was to uae something like pproxy to relay the connection through my own peoxy server without user:pass. Has not been fully effective though.

      I will look into doing this and using IP authorization instead of user:pass. Thank you for the help.

      How is vanilla selenium with WebRTC or DNS leaks?

      • jflorez@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 year ago

        Also since Selenium just drives an actual browser the WebRTC and DNS leaks will be the browser’s responsibility not selenium. As long as you can locate elements on a page your will be ok

      • jflorez@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 year ago

        You might need to install your own proxy on the selenium PC and then chain that proxy to the authenticated one. Then configure the driver to use the local unauthenticated proxy

  • iliketurtles@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    1 year ago

    Not 100% sure if this is helpful, but here is what I’m importing and a snippet initiating webdriver. Sorry on mobile. The hardest part was getting the right chromium installed and getting the path right. I believe this is the one I used. sudo apt-get install chromium-chromedriver

    from selenium.webdriver.chrome.options import Options
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.keys import Keys
    from selenium.common.exceptions import NoSuchElementException
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    
    driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")```
    • PracticalParrotOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      Thanks! I appreciate your response, and love the username! :) Fortunately getting the right chrome driver working was one of the very few things that just worked for me. Have you gotten proxies working without proxy detection with this setup, and if so, what did you do?

      • PracticalParrotOP
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 year ago

        If I understood correctly crossposting is somewhat frowned upon to avoid duplocate posts on lemmy (and I agree with that) so I will remember for next time.
        Thanks!