File size: 5,396 Bytes
0fbe92d
 
 
 
 
bb6db29
7f3321c
 
ac520eb
7f3321c
02624aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0fbe92d
4ea608a
0fbe92d
4ea608a
 
 
 
 
 
 
 
 
8695d39
 
 
 
ac520eb
 
 
0fbe92d
ac520eb
 
 
0fbe92d
4ea608a
ac520eb
 
 
 
 
 
 
4ea608a
 
ac520eb
 
 
 
 
 
 
 
 
 
 
0fbe92d
8695d39
ac520eb
4ea608a
 
 
 
 
 
 
 
 
 
ac520eb
 
 
 
 
 
 
 
 
 
 
 
 
 
0fbe92d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import streamlit as st

import setuptools

with open("README.md", encoding="utf-8") as readme_file:
    readme = readme_file.read()

setuptools.setup(
    name='webdriver_manager',
    python_requires=">=3.7",
    long_description=readme,
    long_description_content_type="text/markdown",
    packages=setuptools.find_packages(include=['webdriver_manager*']),
    include_package_data=True,
    version='4.0.1',
    description='Library provides the way to automatically manage drivers for different browsers',
    author='Sergey Pirogov',
    author_email='automationremarks@gmail.com',
    url='https://github.com/SergeyPirogov/webdriver_manager',
    keywords=['testing', 'selenium', 'driver', 'test automation'],
    classifiers=[
        'License :: OSI Approved :: Apache Software License',
        'Intended Audience :: Information Technology',
        'Intended Audience :: Developers',
        'Programming Language :: Python :: 3.7',
        'Programming Language :: Python :: 3.8',
        'Programming Language :: Python :: 3.9',
        'Programming Language :: Python :: 3.10',
        'Programming Language :: Python :: 3.11',
        'Topic :: Software Development :: '
        'Libraries :: Python Modules',
        'Operating System :: Microsoft :: Windows',
        'Operating System :: POSIX',
        'Operating System :: Unix',
        'Operating System :: MacOS',
    ],
    install_requires=[
        'requests',
        'python-dotenv',
        'packaging'
    ],
    package_data={
        "webdriver_manager": ["py.typed"]
    },
)


def main():
    # Input fields
    st.title("Facebook Group Poster")
    account = st.text_input("Facebook Account Email", "sample@gmail.com")
    password = st.text_input("Facebook Password", "sample", type="password")
    groups_links_list = st.text_area("Facebook Group URLs (one per line)",
                                     "https://www.facebook.com/groups/sample1\nhttps://www.facebook.com/groups/sample2")
    message = st.text_area("Post Message", "Checkout this amazing script...")
    images_list = st.file_uploader("Upload Images", accept_multiple_files=True)

    if st.button('Post to Facebook Groups'):
        if not account or not password or not groups_links_list or not message or not images_list:
            st.error("Please fill all the fields.")
        else:
            chrome_options = Options()
            prefs = {"profile.default_content_setting_values.notifications": 2}
            chrome_options.add_experimental_option("prefs", prefs)

            with st.spinner("Posting to Facebook..."): 
                driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
                driver.get('https://www.facebook.com')

                # Login Logic (Replace XPaths if needed)
                emailelement = driver.find_element(By.XPATH,'//*[@id="email"]')
                emailelement.send_keys(account)
                passelement = driver.find_element(By.XPATH,'//*[@id="pass"]')
                passelement.send_keys(password)
                loginelement = driver.find_element(By.XPATH,'//*[@id="loginbutton"]')
                loginelement.click()

                # Posting Logic
                groups_links = groups_links_list.splitlines() 

                for group in groups_links:
                    driver.get(group)
                    time.sleep(2)

                    try:
                        driver.find_element(By.XPATH,'//*[@label="Start Discussion"]').click()
                        post_box=driver.find_element_by_css_selector("[name='xhpc_message_text']")
                    except:
                        post_box=driver.find_element_by_css_selector("[name='xhpc_message_text']")
                    post_box.send_keys(message)

                    time.sleep(1)

                    # Image Upload Logic (Adapt based on Streamlit setup)
                    for image_file in images_list:
                        photo_element = driver.find_element(By.XPATH,'//input[@type="file"]')
                        image_path = image_file.name  # Placeholder! Adjust how you get the path
                        photo_element.send_keys(image_path) 
                        time.sleep(1)

                    # time.sleep(6) 
                    # post_button = driver.find_element_by_xpath("//*[@data-testid='react-composer-post-button']") 

                    # Handle image uploads (assuming one upload field per image)
                    for image_file in images_list:
                        photo_element = driver.find_element(By.XPATH,'//input[@type="file"]')
                        photo_element.send_keys(image_file.name)  # Or image_file.path, adjust as needed
                        time.sleep(1)

                    time.sleep(6) 
                    post_button = driver.find_element_by_xpath("//*[@data-testid='react-composer-post-button']") 
                    # ... (Rest of your logic to click the post button) 

                driver.close()

if __name__ == '__main__':
    main()